关于 Windows API 控件 ID 的一些简单问题
Some quick questions about Windows API control IDs
我有几个关于控件 ID 的问题:
是否可以通过设置 GWL(P)_ID
在运行时更改它们?或者对话管理器不会被愚弄?由于这是一个框架,我需要在运行时生成它们;最初它们是 0.
控件 ID 的唯一性范围是什么,整个顶层 window 还是控件的直接父级?我的框架中的控件存储在自定义容器 window 中,每个顶层都有多个这样的容器 window。
谢谢。
问题一
可以通过调用 SetWindowLongPtr
:
来更改控件 ID
SetWindowLongPtr(hwndChild, DWL_ID, new_id);
问题二
来自 CreateWindow
的文档,我强调:
hMenu [in, optional]
A handle to a menu, or specifies a child-window identifier depending
on the window style. For an overlapped or pop-up window, hMenu
identifies the menu to be used with the window; it can be NULL if the
class menu is to be used. For a child window, hMenu specifies the
child-window identifier, an integer value used by a dialog box control
to notify its parent about events. The application determines the
child-window identifier; it must be unique for all child windows with
the same parent window.
或来自GetDlgItem
的文档:
You can use the GetDlgItem function with any parent-child window pair,
not just with dialog boxes. As long as the hDlg parameter specifies a
parent window and the child window has a unique identifier (as
specified by the hMenu parameter in the CreateWindow or CreateWindowEx
function that created the child window), GetDlgItem returns a valid
handle to the child window.
因此 ID 的范围是父 window。但这也告诉您,您可以在通过重新设计的 hMenu
参数创建子 window 时指定 ID。
我有几个关于控件 ID 的问题:
是否可以通过设置
GWL(P)_ID
在运行时更改它们?或者对话管理器不会被愚弄?由于这是一个框架,我需要在运行时生成它们;最初它们是 0.控件 ID 的唯一性范围是什么,整个顶层 window 还是控件的直接父级?我的框架中的控件存储在自定义容器 window 中,每个顶层都有多个这样的容器 window。
谢谢。
问题一
可以通过调用 SetWindowLongPtr
:
SetWindowLongPtr(hwndChild, DWL_ID, new_id);
问题二
来自 CreateWindow
的文档,我强调:
hMenu [in, optional]
A handle to a menu, or specifies a child-window identifier depending on the window style. For an overlapped or pop-up window, hMenu identifies the menu to be used with the window; it can be NULL if the class menu is to be used. For a child window, hMenu specifies the child-window identifier, an integer value used by a dialog box control to notify its parent about events. The application determines the child-window identifier; it must be unique for all child windows with the same parent window.
或来自GetDlgItem
的文档:
You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes. As long as the hDlg parameter specifies a parent window and the child window has a unique identifier (as specified by the hMenu parameter in the CreateWindow or CreateWindowEx function that created the child window), GetDlgItem returns a valid handle to the child window.
因此 ID 的范围是父 window。但这也告诉您,您可以在通过重新设计的 hMenu
参数创建子 window 时指定 ID。