我在 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) 中,但我不知道如何或在何处为其提供事件处理程序。有什么帮助吗?
最佳答案
可以通过三种方式检测按钮是否被点击。
首选方法是添加一个
WM_COMMAND
按钮的父窗口的窗口过程的处理程序。单击按钮时,它会发送BN_CLICKED
。通知其父窗口。这在按钮的 MSDN 文档中有描述:如果您要将按钮添加到不属于您的父窗口,您可以使用
SetWindowsLongPtr(GWL_WNDPROC)
对父窗口进行子类化。或SetWindowSubClass()
,然后您可以处理发送给它的消息,例如BN_CLICKED
。这仅在子类化代码在拥有父窗口的同一线程中运行时才有效。或者,您可以将按钮本身子类化并改为处理键盘和鼠标消息。
另一种选择是使用
SetWinEventHook()
设置事件 Hook 要求接收EVENT_OBJECT_INVOKED
事件。在event callback procedure ,提供的hwnd
、ID
和idChild
参数将标识正在调用的控件,例如单击的按钮。
关于c++ - 将事件处理程序添加到 C++ 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173176/