1

我在一个窗口中创建了两个列表框项目。现在,每当他们的选择之一发生变化时,我都会尝试从他们那里获得通知。

我在窗口消息LBN_SELCHANGE下收到通知代码。WM_COMMAND

MSDN 文档LBN_SELCHANGE

wParam
    The LOWORD contains the identifier of the list box.
    The HIWORD specifies the notification code.
lParam
    Handle to the list box.

现在,我想使用那些“标识符”来区分这两个列表框(查找发送此消息的控件)。我知道,我也可以从lParam参数中的句柄值中找到它,但是如果可以改用标识符代码,那么最好不要将窗口句柄暴露给全局命名空间。

那么,是否可以在不使用资源的情况下为控件分配一个标识符(或者如果有一个自动分配的 ID)?

4

2 回答 2

3

也可以使用更改子窗口标识符

LONG WINAPI SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );

与 GWL_ID。但是,更好的解决方案是创建具有正确标识符的窗口。

于 2013-09-06T00:13:51.980 回答
1

创建子控件时,控件 IDCreateWindow作为hMenu参数传递给。该参数的文档包含以下部分(重点是我的):

对于窗口,hMenu 指定子窗口标识符,一个整数值,对话框控件用于通知其父级事件。应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。

除了在其兄弟姐妹中唯一之外,窗口 ID 必须适合 16 位(有效范围是 8 到 0xDFFF)。您可以将您的 ID 放入 VS 控制的Resource.h文件中并更新 的值,_APS_NEXT_CONTROL_VALUE以防止与从对话框资源创建的同级发生冲突。

于 2013-08-12T17:10:14.137 回答