首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理非客户区域的按钮事件

如何处理非客户区域的按钮事件
EN

Stack Overflow用户
提问于 2013-05-19 16:22:42
回答 1查看 1.5K关注 0票数 2

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

代码语言:javascript
运行
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-19 20:50:25

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

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16636824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档