Wer*_*ner 2 c++ events winapi button
我在 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);
Run Code Online (Sandbox Code Playgroud)
该按钮显示在主窗口 (hWnd) 中,但我不知道如何或在何处为其提供事件处理程序。请问有什么帮助吗?
有三种方法可以检测被点击的按钮。
首选方法是向WM_COMMAND按钮的父窗口的窗口过程添加一个处理程序。单击按钮时,它会向BN_CLICKED其父窗口发送通知。按钮的 MSDN 文档中对此进行了描述:
如果要将按钮添加到不属于您的父窗口,则可以使用SetWindowsLongPtr(GWL_WNDPROC)或对父窗口进行子类化SetWindowSubClass(),然后您可以处理发送给它的消息,例如BN_CLICKED. 这仅在子类化代码在拥有父窗口的同一线程中运行时才有效。
或者,您可以子类化按钮本身并处理键盘和鼠标消息。
另一种选择是使用SetWinEventHook()请求接收EVENT_OBJECT_INVOKED事件来设置事件挂钩。在事件回调过程中,提供的hwnd、ID和idChild参数将标识正在调用的控件,例如单击的按钮。