資源簡介
Qt無邊框窗口可以使用重載鼠標(biāo)的方法去實(shí)現(xiàn)窗口縮放功能,但是會存在窗口抖動效果,但調(diào)用系統(tǒng)的API接口,可以在窗口縮放的時(shí)候避免出現(xiàn)窗口抖動情況,但是唯一缺點(diǎn)是不支持跨平臺
代碼片段和文件信息
#include?“frameless.h“
frameLess::frameLess(QWidget?*parent)
:?QDialog(parent)
{
this->setWindowFlags(Qt::framelessWindowHint?|?Qt::WindowSystemMenuHint);?//?設(shè)置成無邊框?qū)υ捒?br/> SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_SIZEWE)));
//SendMessage(WM_SYSCOMMAND?SC_SIZE?|?WMSZ_TOP?MAKELPARAM(point.x?point.y));
setMinimumSize(100?100);
setMaximumSize(8000?7000);
}
frameLess::~frameLess()
{
}
void?frameLess::region(const?QPoint?&cursorGlobalPoint?bool?&activeFlag)
{
QRect?rect?=?this->rect();
QPoint?tl?=?mapToGlobal(rect.topLeft());
QPoint?rb?=?mapToGlobal(rect.bottomRight());
int?x?=?cursorGlobalPoint.x();
int?y?=?cursorGlobalPoint.y();
activeFlag?=?true;
if?(tl.x()?+?PADDING?+?2?>=?x?&&?tl.x()?<=?x?&&?tl.y()?+?PADDING?+?2?>=?y?&&?tl.y()?<=?y)?{
//?左上角
dir?=?LEFTTOP;
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else?if?(x?>=?rb.x()?-?PADDING?-?2?&&?x?<=?rb.x()?&&?y?>=?rb.y()?-?PADDING?-?2?&&?y?<=?rb.y())?{
//?右下角
dir?=?RIGHTBOTTOM;
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else?if?(x?<=?tl.x()?+?PADDING?+?2?&&?x?>=?tl.x()?&&?y?>=?rb.y()?-?PADDING?-?2?&&?y?<=?rb.y())?{
//左下角
dir?=?LEFTBOTTOM;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else?if?(x?<=?rb.x()?&&?x?>=?rb.x()?-?PADDING?-?2?&&?y?>=?tl.y()?&&?y?<=?tl.y()?+?PADDING?+?2)?{
//?右上角
dir?=?RIGHTTOP;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else?if?(x?<=?tl.x()?+?PADDING?&&?x?>=?tl.x())?{
//?左邊
dir?=?LEFT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else?if?(x?<=?rb.x()?&&?x?>=?rb.x()?-?PADDING)?{
//?右邊
dir?=?RIGHT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else?if?(y?>=?tl.y()?&&?y?<=?tl.y()?+?PADDING)?{
//?上邊
dir?=?UP;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else?if?(y?<=?rb.y()?&&?y?>=?rb.y()?-?PADDING)?{
//?下邊
dir?=?DOWN;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else?{
//?默認(rèn)
dir?=?NONE;
this->setCursor(QCursor(Qt::ArrowCursor));
activeFlag?=?false;
}
}
bool?frameLess::nativeEventFilter(const?QByteArray?&eventType?void?*message?long?*result)
{
if?(eventType?==?“windows_generic_MSG“?||?eventType?==?“windows_dispatcher_MSG“)
{
MSG*?msg?=?(MSG*)message;
if?(msg->message?==?WM_MOUSEMOVE)
{
QPoint?pt?=?cursor().pos();
bool?activeFlag;
region(pt?activeFlag);
if?(activeFlag)
{
switch?(dir)
{
case?UP:
case?DOWN:
SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_SIZENS)));
break;
case?LEFT:
case?RIGHT:
SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_SIZEWE)));
break;
case?LEFTTOP:
case?RIGHTBOTTOM:
SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_SIZENWSE)));
break;
case?RIGHTTOP:
case?LEFTBOTTOM:
SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_SIZENESW)));
break;
case?NONE:
default:
SetCursor(LoadCursor(NULL?MAKEINTRESOURCE(IDC_ARROW)));
return
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-18?17:05??fr
?????目錄???????????0??2019-06-18?17:04??fr
?????文件????????1075??2019-06-18?17:03??fr
?????文件????35622912??2019-06-18?17:04??fr
?????目錄???????????0??2019-06-18?17:05??fr
?????文件????????5111??2019-06-18?16:59??fr
?????文件?????????819??2019-06-18?17:04??fr
?????文件????????8076??2019-06-18?17:02??fr
?????文件????????1741??2019-06-18?17:02??fr
?????文件?????????631??2019-06-18?17:04??fr
?????目錄???????????0??2019-06-18?17:03??fr
?????目錄???????????0??2019-06-18?17:03??fr
?????文件????????2802??2019-06-18?17:04??fr
?????文件?????????250??2019-06-18?17:03??fr
?????目錄???????????0??2019-06-18?17:00??fr
?????目錄???????????0??2019-06-18?17:00??fr
?????目錄???????????0??2019-06-18?17:05??fr
評論
共有 條評論