• 大小: 13.07MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-05
  • 语言: 其他
  • 标签: C++  WINAPI  Qt  

资源简介

Qt无边框窗口可以使用重载鼠标的方法去实现窗口缩放功能,但是会存在窗口抖动效果,但调用系统的API接口,可以在窗口缩放的时候避免出现窗口抖动情况,但是唯一缺点是不支持跨平台

资源截图

代码片段和文件信息

#include “frameless.h“

frameLess::frameLess(QWidget *parent)
: QDialog(parent)
{
this->setWindowFlags(Qt::framelessWindowHint | Qt::WindowSystemMenuHint); // 设置成无边框对话框
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 {
// 默认
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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-18 17:05  frameLessWinApi\
     目录           0  2019-06-18 17:04  frameLessWinApi\frameLessWinApi\
     文件        1075  2019-06-18 17:03  frameLessWinApi\frameLessWinApi.sln
     文件    35622912  2019-06-18 17:04  frameLessWinApi\frameLessWinApi.VC.db
     目录           0  2019-06-18 17:05  frameLessWinApi\frameLessWinApi\Debug\
     文件        5111  2019-06-18 16:59  frameLessWinApi\frameLessWinApi\frameless.cpp
     文件         819  2019-06-18 17:04  frameLessWinApi\frameLessWinApi\frameless.h
     文件        8076  2019-06-18 17:02  frameLessWinApi\frameLessWinApi\frameLessWinApi.vcxproj
     文件        1741  2019-06-18 17:02  frameLessWinApi\frameLessWinApi\frameLessWinApi.vcxproj.filters
     文件         631  2019-06-18 17:04  frameLessWinApi\frameLessWinApi\frameLessWinApi.vcxproj.user
     目录           0  2019-06-18 17:03  frameLessWinApi\frameLessWinApi\GeneratedFiles\
     目录           0  2019-06-18 17:03  frameLessWinApi\frameLessWinApi\GeneratedFiles\Debug\
     文件        2802  2019-06-18 17:04  frameLessWinApi\frameLessWinApi\GeneratedFiles\Debug\moc_frameless.cpp
     文件         250  2019-06-18 17:03  frameLessWinApi\frameLessWinApi\main.cpp
     目录           0  2019-06-18 17:00  frameLessWinApi\frameLessWinApi\Resources\
     目录           0  2019-06-18 17:00  frameLessWinApi\Win32\
     目录           0  2019-06-18 17:05  frameLessWinApi\Win32\Debug\

评论

共有 条评论