我在c ++中创建了一个按钮,如下所示:
HWND btn = CreateWindow(
"BUTTON",
"OK",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
10,
10,
100,
100,
hWnd,
NULL,
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
按钮显示在主窗口(hWnd)中,但我不知道如何或在何处为其提供事件处理程序。有什么帮助吗?
答案 0 :(得分:4)
有三种方法可以检测被点击的按钮。
首选方法是在按钮父窗口的窗口过程中添加WM_COMMAND
处理程序。单击该按钮时,它会向其父窗口发送BN_CLICKED
通知。有关按钮的MSDN文档中对此进行了描述:
如果要将按钮添加到您不拥有的父窗口,可以使用SetWindowsLongPtr(GWL_WNDPROC)
或SetWindowSubClass()
对父窗口进行子类化,然后您可以处理发送的消息对它,例如BN_CLICKED
。这仅在子类代码在拥有父窗口的同一线程中运行时才有效。
或者,您可以将按钮本身子类化,然后处理键盘和鼠标消息。
另一种选择是使用SetWinEventHook()
设置事件挂钩,要求接收EVENT_OBJECT_INVOKED
个事件。在event callback procedure中,提供的hwnd
,ID
和idChild
参数将标识正在调用的控件,例如单击的按钮。
答案 1 :(得分:2)
单击该按钮时,它会向其父窗口发送BN_CLICKED
通知消息(由WM_COMMAND
消息携带)。 BN_CLICKED
通知代码位于邮件HIWORD
的{{1}}中。消息的wParam
的{{1}}具有按钮的ID。消息的LOWORD
包含按钮的wParam
。这就是在线Windows文档中的全部内容。 Google为lParam
。
考虑这个伪代码......它来自内存。基本上,将HWND
案例中的内容添加到您已有的窗口过程中:
BN_CLICKED