将事件处理程序添加到 C++ 中的按钮

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) 中,但我不知道如何或在何处为其提供事件处理程序。请问有什么帮助吗?

Rem*_*eau 5

有三种方法可以检测被点击的按钮。

  1. 首选方法是向WM_COMMAND按钮的父窗口的窗口过程添加一个处理程序。单击按钮时,它会向BN_CLICKED其父窗口发送通知。按钮的 MSDN 文档中对此进行了描述:

    处理来自按钮的消息

    来自按钮的通知消息

  2. 如果要将按钮添加到不属于您的父窗口,则可以使用SetWindowsLongPtr(GWL_WNDPROC)或对父窗口进行子类化SetWindowSubClass(),然后您可以处理发送给它的消息,例如BN_CLICKED. 这仅在子类化代码在拥有父窗口的同一线程中运行时才有效。

    或者,您可以子类化按钮本身并处理键盘和鼠标消息。

  3. 另一种选择是使用SetWinEventHook()请求接收EVENT_OBJECT_INVOKED事件来设置事件挂钩。在事件回调过程中,提供的hwndIDidChild参数将标识正在调用的控件,例如单击的按钮。