无论如何,我可以在不使用资源的情况下为Win32控件分配标识符代码吗?

时间:2013-08-12 16:34:05

标签: c++ winapi resources identifier win32gui

我在一个窗口中创建了两个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)?

2 个答案:

答案 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的值以防止与对话框资源创建的兄弟冲突。