我从Win32 api开始,我使用流动的代码向我的主窗口添加一个按钮控件:
HWND boton = CreateWindow(
"BUTTON", //
"Caption", //
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Styles.
250, // x position.
10, // y position.
100, // Button width.
40, // Button height.
hwnd, // Parent window.
NULL, // No menu.
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // Pointer not needed.
我怎么能为它分配一个id,所以我可以在循环中获取消息,在消息循环中我试图捕获消息为WM_COMMAND但我没有得到任何结果我也尝试过WM_NOTIFY。 / p>
答案 0 :(得分:2)
实际上,您无需为按钮指定ID。问题是您的代码缺少样式位CreateWindow()
。
您必须为父窗口指定样式BS_NOTIFY
才能从Button控件接收通知。
每次点击按钮,您都会收到WM_COMMAND
窗口消息(HIWORD(w_param) == BN_CLICKED)
。有关详细信息,请参阅BN_CLICKED
文档。
使用控件ID是不必要的,因为BN_CLICKED
消息将为您提供控件的窗口句柄。因为您需要跟踪窗口句柄,以便在收到DestroyWindow
时正确调用WM_DESTROY
,比较按钮的窗口句柄就像使用控件ID一样简单。
答案 1 :(得分:2)
要为其分配ID,您必须使用hMenu
参数。如果您已指定窗口将是子窗口(即WS_CHILD
),则hMenu
参数将被解释为窗口的整数ID。另外,提供BS_NOTIFY
样式。
HWND boton = CreateWindow (
"BUTTON",
WS_TAPSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_NOTIFY,
250, 10, 100, 40,
hwnd,
(HMENU)101, // This becomes the Control ID
(HINSTNACE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
编辑:关于BS_NOTIFY
的信息特别喊出Heath Hunnicutt。
答案 2 :(得分:0)
要设置窗口ID,请将其传递,就像它是HMENU一样:
(HMENU)nChildID