gpt4 book ai didi

c++ - 如何处理非客户区的按钮事件

转载 作者:可可西里 更新时间:2023-11-01 10:37:37 27 4
gpt4 key购买 nike

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

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);
}

最佳答案

是的,这很容易做到。 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

关于c++ - 如何处理非客户区的按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com