我在一个窗口中创建了两个List Box项。现在,我正试图在他们的一个选择发生变化时从他们那里收到通知。
我在WM_COMMAND
窗口消息下收到LBN_SELCHANGE
通知代码。
LBN_SELCHANGE
的MSDN文档:
wParam
The LOWORD contains the identifier of the list box.
The HIWORD specifies the notification code.
lParam
Handle to the list box.
现在,我想区分这两个列表框(找到哪个控件发送此消息)与使用这些“标识符”。我知道,我也可以从lParam
参数的句柄值中找到它,但是如果可以使用标识符代码,那么在不向全局命名空间公开窗口句柄方面会更好。 / p>
那么,是否可以在不使用资源的情况下为控件分配标识符(或查找自动分配的ID)?
答案 0 :(得分:2)
还可以使用
更改子窗口标识符LONG WINAPI SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );
使用GWL_ID。但是,更好的解决方案是使用正确的标识符创建窗口。
答案 1 :(得分:1)
创建子控件时,控件ID将作为hMenu
参数传递给CreateWindow
。参数的文档包含以下部分(强调我的):
对于子窗口,hMenu指定子窗口标识符,这是一个对话框控件用于通知其父级事件的整数值。应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。
除了在其兄弟姐妹中独特之外,窗口ID必须符合16位(valid range is 8 to 0xDFFF)。您可以将ID放入VS控制的 Resource.h 文件中,并更新_APS_NEXT_CONTROL_VALUE
的值以防止与对话框资源创建的兄弟冲突。