Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • WinAPI. Button ( Кнопка ).

    В Windows все создается в виде окон, в том числе и кнопки. Функция CreateWindow() которая создает самые обычные перекрывающие, всплывающие или дочерние окна, создает также и кнопки:

    HWND WINAPI CreateWindow (
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    INT х,
    Int у,
    INT nWidth,
    INT nHeight,
    HWND hWndParent,
    HMENU HMenu,
    HINSTANCE HINSTANCE,
    LPVOID lpParam );
    Что касается создания кнопок, в функции CreateWindow () нас интересуют два параметра которые делают окно - кнопкой: LPCTSTR lpClassName в который записывается имя класса (В нашем случае "BUTTON"), и HMENU HMenu , в который записываем нечто вроде идентификационного номера кнопки (число которое приводится к типу HMENU - (HMENU)1001), чтоб в функции обработчике WndProc() можно было различать нажатие одной кнопки от другой. В переменную HWND hWndParent заносим дескриптор окна, в котором будет создаваться кнопка. Как упоминалось ранее переменная типа HWND хранит дескриптор, своего рода указатель, через который мы управляем нужным окном.
    Чтоб просмотреть простой пример работы кнопки, после созданного окна в прошлой статье добавим строки:
    HWND OK = CreateWindow(
    "BUTTON",
    "OK",
    WS_CHILD|WS_VISIBLE,
    250,
    150,
    70 ,
    30,
    hwnd,
    (HMENU)1001,
    hThisInstance,
    NULL
    );
    После того как кнопка создана, нужно написать несколько строчек кода чтоб программа реагировала на действия. Windows генерирует огромное количество сигналов которые поступают от разных процессов в компьютере Операционной Системе. Все эти сигналы отправляются в функцию обработчик -
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    UINT message переменная сообщает о типе сообщения в целом, а WPARAM wParam и LPARAM lParam о дополнительных сведеньях сообщения.
    При выборе меню, отправки сообщения родительскому окну, или нажатии на кнопку генерируется сообщение типа WM_COMMAND. Поэтому в операторе switch(message) создается дополнительная проверка на сообщение типа WM_COMMAND. Когда Windows генерирует это сообщение , проверяем параметр wParam, в котором хранится идентификатор события (например какое именно меню было выбрано, или какая кнопка была нажата).
    В даном примере , после нажатия кнопки, в консольном окне выводится текстовое сообщение. Единственное дополнение - чтоб заработала функция printf() вывода в консоль, нужно подключить файл stdio.h :
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {

    switch (message)
    { case WM_COMMAND: if(wParam==1001) printf("OK!"); break;

    case WM_DESTROY:
    PostQuitMessage (0);
    break;
    default:
    return DefWindowProc (hwnd, message, wParam, lParam);

    }

    return 0;

    }


    Читайте больше в категории: Программирование

    2016-07-09 15:11:28



    Другие статьи:

    HTML. Общее

    STM32. Мигание светодиодов

    JavaScript. HTML DOM

    Maya. Нормали и Системы координат

    2D. Рисование реалистичной воды

    PHP. Строки. Переменные в строках

    STM32. Контроллеры прерываний NVIC и EXTI

    Java. Классы и Обьекты

    WinAPI. График Функций.

    Maya. Extrude по кривой