Отправляет email-рассылки с помощью сервиса Sendsay

Windows API

  Все выпуски  

Windows API


Информационный Канал Subscribe.Ru

Windows API. Рассылки сайта progs.biz
Рассылка № 18
 
Начало > WinAPI > Основы > Урок 20

Фленов М. Программирование в Delphi глазами хакера.
Фленов М. Программирование в Delphi глазами хакера.
Заказать на Озоне


Полные версии уроков (с картинками): урок 20.

Windows API
Урок 20. Работа с checkbox'ом

Checkbox с точки зрения программирования является кнопкой. Это означает, что мы должны создавать его как и любую кнопку используя функцию CreateWindows. В качестве стиля надо указать BS_AUTOCHECKBOX (в этом случае галочка в checkbox'е будет автоматически ставиться/убираться) или BS_CHECKBOX (в этом случае галочка сама ставиться не будет - и это будет задача программиста).

Вот так можно создать checkbox (это пишем в функции WinMain, после вызова CreateWindow для главного окна):

CreateWindow("button", "Press me", WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,
        10, 10, 80, 30, hwnd, (HMENU)10001, hInstance, NULL);

Принцип тут такой же, как и при создании обычной кнопки (см. урок 18). Обратите внимание на стиль для checkbox'а, задаваемый в третьем параметре.

Теперь о том, как обрабатывать щелчок по checkbox'у.

Для примера напишем код, который будет показывать текущее состояние checkbox'а в заголовке главного окна. Вот что вы должны добавить в switch оконной процедуры:

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    switch (Message){
    case WM_COMMAND:
        // Если мы нажали на checkbox'е.
        if(LOWORD(wparam)==10001)
        {
            // Получаем HWND нашего chechbox'а.
            HWND hwndCheck = GetDlgItem(hwnd, 10001);
            // Выясняем текущее состояние chechbox'а.
            LRESULT res = SendMessage (hwndCheck, BM_GETCHECK, 0, 0);
            // Если галочка стоит.
            if(res == BST_CHECKED)
            {
                SetWindowText(hwnd, "Checked");
            }
            // Если галочка не стоит.
            if(res == BST_UNCHECKED)
            {
                SetWindowText(hwnd, "Unchecked");
            }
        }
        ...

Как вы видите, для выяснения состояния checkbox'а мы посылаем ему сообщение BM_GETCHECK посредством вызова функции SendMessage, которая и возвращает в качестве значения одну из констант BST_CHECKED или BST_UNCHECKED (на самом деле есть еще одно значение: BST_INDETERMINATE - для неопределенного значения состояния checkbox'а). Функция SendMessage требует в качестве первого параметра HWND окна, которому посылаем сообщение (в нашем случае это окно - это сам checkbox). HWND для нашего checkbox'а мы выясняем путем вызова функции GetDlgItem, первый параметр которой - HWND родительского окна для элемента управления, а второй - идентификатор элемента управление (тот самый, который мы задали при создании элемента управления в вызове функции CreateWindow).

После выяснения состояния checkbox'а мы меняем заголовок главного окна путем вызова функции SetWindowText.

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное