Qt实现Windows风格无边框
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风格无边框相关推荐
- Qt 自定义界面(实现无边框、可移动)
设置窗口标志为无边框 this->setWindowFlags(Qt::FramelessWindowHint); 设置无边框之后,窗体是无法移动的,下面我们介绍两种方式来进行移动. 1. Qt ...
- Qt实现半透明、无边框、可自由移动、不规则的窗体
目录 预期效果 功能要点 实现步骤 进一步扩展应用 预期效果 先出示效果图一张,如果不是读者需要的,读者可以看完效果图之后就关闭本网页啦. 功能要点 窗口无边框 可自由拖动 背景透明度自定义 边框可设 ...
- Qt 实现带阴影 无边框的QMessageBox
Qt 实现带阴影的QMessagebox 在实际项目里面使用到了QMessageBox做一个弹窗,最开始是样式不是需要的样式,就去找了一下QMessageBox的样式表,一般来说可以使用findChi ...
- FMX Windows下无边框窗口处理
1.窗口的Transparency不能为True 2.窗口BorderIcons设为[] 3.窗口BorderStyle设为Single 4.重定义WindowBorderStyle样式,把下面这段粘 ...
- QT实现完美无边框窗口(可拖动,可调整大小)
效果如下: 只需定义 nativeEvent 事件即可完成这样的功能 ,但要注意的是,这是通过Windows api实现的. 样例如下:(注意头文件) framelesswidget.h #ifnde ...
- QT无边框窗体改变大小 很顺畅
近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...
- Qt无边框窗体(Windows)
Qt无边框窗体Windows篇 去掉标题栏和边框 实现拖拽功能 还原窗体功能 注意点 我们可以做的更好 添加阴影 亚克力面板效果 结语 去掉标题栏和边框 首先第一步我们要通过设置系统绘制的边框消失 s ...
- qt 全屏窗口有边框_如何在全屏无边框窗口模式下玩任何Windows游戏
qt 全屏窗口有边框 If you're a regular PC gamer, you know that playing a game in full screen mode can someti ...
- Qt Quick无边框窗口
开发环境:Qt Creator 5.6 内容: 使用 Qt Quick创建无边框窗口 Qt Quick是一个无比强大.无比方便快捷的跨平台的开发框架,并且能通过Qt强大的元对象系统实现qml与c+ ...
- WPF 调用API修改窗体风格实现真正的无边框窗体
原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...
最新文章
- viewpage的使用
- 60%的安卓APP存在漏洞,平均每个有39个漏洞
- java代理的原理及应用
- Django05-2:路由分发/命名空间/伪静态/虚拟环境/django版本区别
- c#queue_带有C#示例的Queue.CopyTo()方法
- 淘汰Hyper-V replication 拥抱Storage Replica
- 我:一个女孩从软件测试工程师到主管的成长
- JavaScript中字符串的match与replace方法
- C++ TBB 文档手册地址
- JAVA设计模式之3-抽象工厂模式
- 小白进阶之影片TS版,TC版,CAM版,HD版,BD版,DVD,HDVD等版本介绍
- freeswitch通话记录mysql_freeswitch电话计费详单入库方法
- 正弦波、方波、三角波的产生和两两之间相互转换
- 如何快速去掉word页眉横线
- idea解决Untracked Files Prevent Merge问题
- 华为路由器时区以及时间配置
- IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
- [2011JMAA]Remarks on the regularity criteria for generalized MHD equations
- 公链,多少资金盘假汝之名以行?
- 融媒体网络营销WSEO案例分享:两天内与大型网站有相同排名
热门文章
- 【观察】海外本地化机遇与挑战并存,跨境电商如何跑出“加速度”?
- OpenGL绘制旋转六面体并纹理贴图
- 转载关于后端开发需要学习的内容
- Recoil - Facebook 官方 React 状态管理器
- php 织梦手册,Dede标签快速手册
- python根据时间序列画折线图_Python如何根据时间序列数据作图
- bh1750采集流程图_基于BH1750光照强度数据采集系统的设计
- ABAQUS常见错误(一)多根预应力钢绞线
- Java课程寒假之开发记账本软件(网页版)之一
- 最全官方win10系统安装教程,教你如何用u盘安装win10系统?