【问题标题】:How to handle event of push button on non client area如何处理非客户区的按钮事件
【发布时间】:2013-05-14 06:16:50
【问题描述】:

编辑:我使用以下代码在窗口的非客户区(标题栏)绘制了一个按钮。所以我的问题是:是否可以从这个按钮处理鼠标点击事件?

bool MainWindow::winEvent(MSG *pMessage, long *result)
{
    UINT m = pMessage->message;
    if(m == WM_NCPAINT || m == WM_ACTIVATE)
    {
        HWND id = winId();
        HDC hDeviceContext = GetWindowDC(id);
        RECT rc = {10, 10, 65, 25};
        DrawFrameControl(hDeviceContext, &rc, DFC_BUTTON, DFCS_BUTTONPUSH);
        ReleaseDC(id, hDeviceContext);
        return true;
    }
    return QWidget::winEvent(pMessage, result);
}

【问题讨论】:

    标签: c++ windows qt button nonclient-area


    【解决方案1】:

    是的,这很容易做到。 Windows 专门为非客户区提供了几条消息。例如,您有 WM_NCMOUSEMOVE 可以像 WM_MOUSEMOVE 一样处理,但专门针对非客户区。大多数消息的工作方式与它们的客户区对应物一样,并且通常具有相同的数据结构。下面是非客户区消息的列表。

    WM_NCCREATE
    WM_NCDESTROY 
    WM_NCCALCSIZE
    WM_NCHITTEST 
    WM_NCPAINT 
    WM_NCACTIVATE
    
    WM_NCMOUSEMOVE
    WM_NCLBUTTONDOWN
    WM_NCLBUTTONUP
    WM_NCLBUTTONDBLCLK
    WM_NCRBUTTONDOWN
    WM_NCRBUTTONUP
    WM_NCRBUTTONDBLCLK
    WM_NCMBUTTONDOWN
    WM_NCMBUTTONUP
    WM_NCMBUTTONDBLCLK
    
    WM_NCXBUTTONDOWN
    WM_NCXBUTTONUP
    WM_NCXBUTTONDBLCLK
    
    WM_NCMOUSEHOVER
    WM_NCMOUSELEAVE
    

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 2013-07-03
      • 2011-10-16
      • 2012-04-27
      • 1970-01-01
      • 2018-10-12
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多