почему родительское окно не получает уведомления от дочернего выпадающего списка? - PullRequest
0 голосов
/ 11 июня 2010

Я создаю простое окно с comboboxex (со вставкой нескольких растровых изображений), мне нужно знать, когда пользователь выбрал элемент из комбинированного окна (мне нужно CBEN_ENDEDIT, я думаю)Но родительское окно не получает WM_NOTIFY из этого поля со списком, кроме одного значения.Может ли кто-нибудь помочь мне с этим, пожалуйста?Почему я не могу получить уведомления?

 //Window creating
        WNDCLASSEX wcx={0}; 
        wcx.cbSize         = sizeof(WNDCLASSEX);           
        wcx.lpfnWndProc    = WndProc; 
        wcx.hInstance      = hInst;   
        RegisterClassEx(&wcx)         

        HWND parent =CreateWindowEx()//-Created with some args


 //WndProc
        switch (uMsg)
        {
        case WM_CREATE:
            {
                //-Creating comboboxex
                DWORD dwStyle = CBS_DROPDOWNLIST | WS_CHILD |WS_VISIBLE;
                HWND child = CreateWindowEx(0, WC_COMBOBOXEX,0, dwStyle, x, y, w, h,  parent, IDC_CMBX, hinst, 0) 
            }
        case WM_NOTIFY :
            {
                LPNMHDR nmhdr = (LPNMHDR)lParam;
                //Here nmhdr->code value is always 4294967279 -I think it is NM_SETCURSOR ?
            }
         }

Большое спасибо.

1 Ответ

1 голос
/ 11 июня 2010

То, что вы, вероятно, хотите, это CBN_SELCHANGE.Из MSDN:

Уведомление CBN_SELCHANGE отправляется, когда пользователь изменяет текущий выбор в списке в поле со списком.Пользователь может изменить выбор, щелкнув в поле со списком или с помощью клавиш со стрелками.Родительское окно поля со списком получает это уведомление в форме сообщения WM_COMMAND с CBN_SELCHANGE в старшем слове параметра wParam.

Так что в этом случае вам нужно обработать WM_COMMAND вместо WM_NOTIFY и проверить, является ли старшее слово параметра wParam CBN_SELCHANGE.

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