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

Программирование на WinApi, C++Builder, Visual C++


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


Выпуск № 48-2003 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Как создать кнопку и обработать ее нажатие?
Кнопки, как и все оконные объекты Windows, создаются через вызов функции CreateWindow(Ex) следующим способом:
hBtnHwnd=CreateWindow(  "BUTTON",
                        "Ok",
                        WS_CHILD|WS_VISIBLE,
                        10,
                        10,
                        75,
                        25,
                        hwnd,
                        (HMENU)ID_BUTTON,
                        hInst,
                        NULL);
Идентификатор кнопки передается в качестве параметра HMENU в виде числового значения. ID_BUTTON определено как:
#define ID_BUTTON 10000
Обработка событий от кнопки производится в оконной процедуре главного окна:
case WM_COMMAND:
    switch(LOWORD(wParam))
    {
        case ID_BUTTON:
            MessageBox(hwnd,"Вы нажали на кнопку", "Сообщение кнопки", MB_OK);
            break;
    }
    break;
Сам идентификатор передается в младшем разряде слова wParam. Мы можем получить это значение используя макрос LOWORD : LOWORD(wParam). Листинг всего примера приведён ниже:
#include <windows.h>
#define ClassName "Win Class"

HWND hwnd;
HWND hBtnHwnd;
HINSTANCE hInst;
#define ID_BUTTON 10000
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lparam)
{
    switch(msg)
    {
        case WM_CREATE:
            hBtnHwnd=CreateWindow(  "BUTTON",
                                    "Ok",
                                    WS_CHILD|WS_VISIBLE,
                                    10,
                                    10,
                                    75,
                                    25,
                                    hwnd,
                                    (HMENU)ID_BUTTON,
                                    hInst,
                                    NULL);
            return 1;
        break;
        case WM_LBUTTONUP: 
            MessageBox(hwnd, "Нажата левая кнопка мышки!", "Тест", MB_OK); 
        break;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case ID_BUTTON:
                    MessageBox(hwnd,"Вы нажали на кнопку", "Сообщение кнопки", MB_OK);
                    break;
            }
            break;
        case WM_DESTROY: 
            PostQuitMessage(0); 
        break;
    }
    return(DefWindowProc(hwnd, msg, wParam, lparam)); // Пускай эта функция обработает то, что не обработали мы...
}

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
    MSG msg;
    WNDCLASS wc;
    hInst=hinstance;
    wc.style = CS_VREDRAW | CS_HREDRAW;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // WHITE_BRUSH...
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // IDC_CROSS...
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hInstance = hinstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = ClassName;
    wc.lpszMenuName = NULL;
    RegisterClass(&wc);
    hwnd = CreateWindow(ClassName, 
                        "Задров! Мир!", 
                        WS_OVERLAPPEDWINDOW, 
                        50, 
                        50, 
                        250, 
                        150, 
                        NULL, 
                        NULL, 
                        hinstance, 
                        NULL);
    ShowWindow(hwnd, ncmdshow);
    //Инициализация здесь!
    while(1)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT) 
                break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    // Завершение здесь!
    return(msg.message);
}

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное