C ++ Win32 API Controls сообщения - PullRequest
       17

C ++ Win32 API Controls сообщения

2 голосов
/ 11 ноября 2009

Я начинаю с Win32 API, я добавляю кнопку управления в главное окно с текущим кодом:


 HWND boton = CreateWindow(
    "BUTTON",   //
    "Caption",       // 
    WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles.
    250,         // x position.
    10,         // y position.
    100,        // Button width.
    40,        // Button height.
    hwnd,       // Parent window.
    NULL,       // No menu.
    (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
    NULL);      // Pointer not needed.

как я могу назначить ему идентификатор, чтобы я мог получить сообщение в цикле, в цикле сообщений я пытаюсь перехватить сообщение как WM_COMMAND, но я не получаю никакого результата, который я тоже пытался с WM_NOTIFY.

Ответы [ 3 ]

2 голосов
/ 11 ноября 2009

Чтобы присвоить ему идентификатор, вы должны использовать параметр hMenu. Если вы указали, что окно будет дочерним (то есть с WS_CHILD), параметр hMenu будет интерпретироваться как целочисленный идентификатор для окна. Также укажите стиль BS_NOTIFY.


HWND boton = CreateWindow (
    "BUTTON", 
    WS_TAPSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_NOTIFY,
    250, 10, 100, 40,
    hwnd,
    (HMENU)101,  // This becomes the Control ID
    (HINSTNACE)GetWindowLong(hwnd,GWL_HINSTANCE),
    NULL);

РЕДАКТИРОВАТЬ: Специальный крик выходит на Хит Hunnicutt для информации о BS_NOTIFY.

2 голосов
/ 11 ноября 2009

На самом деле вам не нужно указывать идентификатор кнопки. Проблема в том, что в вашем коде отсутствует бит стиля для CreateWindow().

Необходимо указать стиль BS_NOTIFY, чтобы родительское окно получало уведомления от элементов управления Button.

После этого вы будете получать окно сообщения WM_COMMAND с (HIWORD(w_param) == BN_CLICKED) при каждом нажатии вашей кнопки. Подробнее см. Документацию BN_CLICKED.

Использование идентификатора элемента управления не требуется, поскольку сообщение BN_CLICKED предоставит вам дескриптор окна элемента управления. Поскольку вам уже необходимо отслеживать дескриптор окна, чтобы правильно вызвать DestroyWindow при получении WM_DESTROY, сравнение дескриптора окна кнопки так же просто, как и использование контрольного идентификатора.

0 голосов
/ 11 ноября 2009

Чтобы установить идентификатор окна, передайте его, как будто это HMENU:

(HMENU) nChildID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...