Qt实现Windows平台上的拖动标题栏贴边最大化等效果

 // 构造函数中要给Widget设置风格 WS_OVERLAPPEDWINDOWthis->setWindowFlags(Qt::FramelessWindowHint);HWND hwnd = reinterpret_cast<HWND>(this->winId());DWORD style = GetWindowLong(hwnd, GWL_STYLE);SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_OVERLAPPEDWINDOW);bool XX::nativeEvent(const QByteArray &eventType, void *message, long *result)
{#ifdef Q_OS_WIN32if (eventType != "windows_generic_MSG")return false;MSG* msg = static_cast<MSG*>(message);QWidget* widget = QWidget::find(reinterpret_cast<WId>(msg->hwnd));if (!widget)return false;switch (msg->message) {case WM_NCCALCSIZE: {*result = 0;return true;}//正确判断窗口的边缘, 窗口的标题,以及窗口的客户区case WM_NCHITTEST: {int x = GET_X_LPARAM(msg->lParam);int y = GET_Y_LPARAM(msg->lParam);QPoint pt = mapFromGlobal(QPoint(x, y));*result = calculateBorder(pt);if (*result == HTCLIENT) {QWidget* tempWidget = this->childAt(pt.x(), pt.y());if (tempWidget == m_titleBar->customWidget()) {*result = HTCAPTION;}}return true;}case WM_GETMINMAXINFO: {if (::IsZoomed(msg->hwnd)) {RECT frame = { 0, 0, 0, 0 };AdjustWindowRectEx(&frame, WS_OVERLAPPEDWINDOW, FALSE, 0);frame.left = abs(frame.left);frame.top = abs(frame.bottom);widget->setContentsMargins(frame.left, frame.top, frame.right, frame.bottom);}else {widget->setContentsMargins(0, 0, 0, 0);}*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);return true;}break;default:break;}#endifreturn QWidget::nativeEvent(eventType, message, result);
}
#endif

继承QWidget,重写nativeEvent事件

Qt实现Windows风格无边框相关推荐

  1. Qt 自定义界面(实现无边框、可移动)

    设置窗口标志为无边框 this->setWindowFlags(Qt::FramelessWindowHint); 设置无边框之后,窗体是无法移动的,下面我们介绍两种方式来进行移动. 1. Qt ...

  2. Qt实现半透明、无边框、可自由移动、不规则的窗体

    目录 预期效果 功能要点 实现步骤 进一步扩展应用 预期效果 先出示效果图一张,如果不是读者需要的,读者可以看完效果图之后就关闭本网页啦. 功能要点 窗口无边框 可自由拖动 背景透明度自定义 边框可设 ...

  3. Qt 实现带阴影 无边框的QMessageBox

    Qt 实现带阴影的QMessagebox 在实际项目里面使用到了QMessageBox做一个弹窗,最开始是样式不是需要的样式,就去找了一下QMessageBox的样式表,一般来说可以使用findChi ...

  4. FMX Windows下无边框窗口处理

    1.窗口的Transparency不能为True 2.窗口BorderIcons设为[] 3.窗口BorderStyle设为Single 4.重定义WindowBorderStyle样式,把下面这段粘 ...

  5. QT实现完美无边框窗口(可拖动,可调整大小)

    效果如下: 只需定义 nativeEvent 事件即可完成这样的功能 ,但要注意的是,这是通过Windows api实现的. 样例如下:(注意头文件) framelesswidget.h #ifnde ...

  6. QT无边框窗体改变大小 很顺畅

    近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...

  7. Qt无边框窗体(Windows)

    Qt无边框窗体Windows篇 去掉标题栏和边框 实现拖拽功能 还原窗体功能 注意点 我们可以做的更好 添加阴影 亚克力面板效果 结语 去掉标题栏和边框 首先第一步我们要通过设置系统绘制的边框消失 s ...

  8. qt 全屏窗口有边框_如何在全屏无边框窗口模式下玩任何Windows游戏

    qt 全屏窗口有边框 If you're a regular PC gamer, you know that playing a game in full screen mode can someti ...

  9. Qt Quick无边框窗口

    开发环境:Qt Creator 5.6 内容:  使用 Qt  Quick创建无边框窗口 Qt Quick是一个无比强大.无比方便快捷的跨平台的开发框架,并且能通过Qt强大的元对象系统实现qml与c+ ...

  10. WPF 调用API修改窗体风格实现真正的无边框窗体

    原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...

最新文章

  1. viewpage的使用
  2. 60%的安卓APP存在漏洞,平均每个有39个漏洞
  3. java代理的原理及应用
  4. Django05-2:路由分发/命名空间/伪静态/虚拟环境/django版本区别
  5. c#queue_带有C#示例的Queue.CopyTo()方法
  6. 淘汰Hyper-V replication 拥抱Storage Replica
  7. 我:一个女孩从软件测试工程师到主管的成长
  8. JavaScript中字符串的match与replace方法
  9. C++ TBB 文档手册地址
  10. JAVA设计模式之3-抽象工厂模式
  11. 小白进阶之影片TS版,TC版,CAM版,HD版,BD版,DVD,HDVD等版本介绍
  12. freeswitch通话记录mysql_freeswitch电话计费详单入库方法
  13. 正弦波、方波、三角波的产生和两两之间相互转换
  14. 如何快速去掉word页眉横线
  15. idea解决Untracked Files Prevent Merge问题
  16. 华为路由器时区以及时间配置
  17. IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
  18. [2011JMAA]Remarks on the regularity criteria for generalized MHD equations
  19. 公链,多少资金盘假汝之名以行?
  20. 融媒体网络营销WSEO案例分享:两天内与大型网站有相同排名

热门文章

  1. 【观察】海外本地化机遇与挑战并存,跨境电商如何跑出“加速度”?
  2. OpenGL绘制旋转六面体并纹理贴图
  3. 转载关于后端开发需要学习的内容
  4. Recoil - Facebook 官方 React 状态管理器
  5. php 织梦手册,Dede标签快速手册
  6. python根据时间序列画折线图_Python如何根据时间序列数据作图
  7. bh1750采集流程图_基于BH1750光照强度数据采集系统的设计
  8. ABAQUS常见错误(一)多根预应力钢绞线
  9. Java课程寒假之开发记账本软件(网页版)之一
  10. 最全官方win10系统安装教程,教你如何用u盘安装win10系统?