C++ 为什么父窗口不';无法从子组合框获取通知?
我用ComboBox创建了一个简单的窗口(插入了一些位图),我需要知道用户何时从ComboBox中选择了一个项目(我想我需要CBEN_ENDEDIT)。但父窗口除了一个值之外,不会从该组合框中获取任何WM_通知。有人能帮我吗?为什么我不能得到通知C++ 为什么父窗口不';无法从子组合框获取通知?,c++,winapi,combobox,C++,Winapi,Combobox,我用ComboBox创建了一个简单的窗口(插入了一些位图),我需要知道用户何时从ComboBox中选择了一个项目(我想我需要CBEN_ENDEDIT)。但父窗口除了一个值之外,不会从该组合框中获取任何WM_通知。有人能帮我吗?为什么我不能得到通知 //Window creating WNDCLASSEX wcx={0}; wcx.cbSize = sizeof(WNDCLASSEX); wcx.lpfnWn
//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 ?
}
}
非常感谢。您可能想要的是
CBN\u SELCHANGE
。
从MSDN:
当用户更改组合框列表框中的当前选择时,将发送CBN_SELCHANGE通知消息。用户可以通过单击列表框或使用箭头键来更改选择。组合框的父窗口以WM_命令消息的形式接收此通知,wParam参数的高阶字中包含CBN_SELCHANGE
因此,在这种情况下,您必须处理WM_命令而不是WM_NOTIFY,并检查wParam参数的高阶字是否为CBN_SELCHANGE。是的……是的。你救了我。非常感谢你。。。。。。。。。。。。。顺便问一下,为什么没有任何WM_NOTIFY从组合框子项进入窗口?一些控件使用WM_NOTIFY,一些控件使用WM_命令。WM_NOTIFY的优点是,它允许以NMHDR结构的形式传递更多信息,但并非所有控件都需要/使用该结构。这里有一篇有趣的文章: