progs.biz  
Начало>WinAPI>API>Урок 20
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Алексей Дубовцев Microsoft .NET. Наиболее полное руководство.
Алексей Дубовцев Microsoft .NET. Наиболее полное руководство.
Заказать на Озоне



Яндекс-цитирования

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.

Результат выполнения программы будет таким:

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


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