Qt窗体引用window自带阴影边框效果
<1>.工程pro文件添加Dwmapi.lib
- LIBS += Dwmapi.lib
<2>.窗体控件添加系统函数
- #ifdef Q_OS_WIN
- #include <Dwmapi.h> // Use system shadow frame
- #endif
- TMainWindow::TMainWindow(QDialog *parent)
- : QDialog(parent)
- {
- #ifdef Q_OS_WIN
- BOOL bEnable = false;
- ::DwmIsCompositionEnabled(&bEnable);
- if (bEnable)
- {
- DWMNCRENDERINGPOLICY ncrp = DWMNCRP_ENABLED;
- ::DwmSetWindowAttribute((HWND)winId(), DWMWA_NCRENDERING_POLICY, &ncrp, sizeof(ncrp));
- MARGINS margins = { - };
- ::DwmExtendFrameIntoClientArea((HWND)winId(), &margins);
- }
- #endif
- }
<3>.边框拖拽功能
- #define MWS_SYS_DRAG_WIDTH 4 //边框响应鼠标间距
- #define FRAME_MINI_WIDTH 1024 //窗体默认最小宽度
- #define FRAME_MINI_HEIGHT 768 //窗体默认最小高度
- bool TMainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
- {
- #ifdef Q_OS_WIN
- MSG *msg = reinterpret_cast<MSG*>(message);
- switch (msg->message)
- {
- case WM_NCHITTEST:
- {
- QPoint p = mapFromGlobal(QCursor::pos());
- int xPos = p.x();
- int yPos = p.y();
- int nHeigh = height();
- int nWidth = width();
- *result = HTNOWHERE;
- if (!isFullScreen() && !isMaximized())
- {
- if (xPos >= && xPos < MWS_SYS_DRAG_WIDTH){
- if (yPos >= && yPos < MWS_SYS_DRAG_WIDTH)
- {
- *result = HTTOPLEFT;
- }
- else if (yPos >= (nHeigh - MWS_SYS_DRAG_WIDTH) && yPos <= nHeigh)
- {
- *result = HTBOTTOMLEFT;
- }
- else
- {
- *result = HTLEFT;
- }
- }
- if (xPos >= nWidth - MWS_SYS_DRAG_WIDTH && xPos <= nWidth)
- {
- if (yPos >= && yPos <= MWS_SYS_DRAG_WIDTH)
- {
- *result = HTTOPRIGHT;
- }
- else if (yPos >= (nHeigh - MWS_SYS_DRAG_WIDTH) && yPos <= nHeigh)
- {
- *result = HTBOTTOMRIGHT;
- }
- else
- {
- *result = HTRIGHT;
- }
- }
- if (xPos >= MWS_SYS_DRAG_WIDTH && xPos < nWidth - MWS_SYS_DRAG_WIDTH
- && yPos > && yPos < MWS_SYS_DRAG_WIDTH)
- {
- *result = HTTOP;
- }
- if (xPos > MWS_SYS_DRAG_WIDTH && xPos < nWidth - MWS_SYS_DRAG_WIDTH
- && yPos >(nHeigh - MWS_SYS_DRAG_WIDTH) && yPos < nHeigh)
- {
- *result = HTBOTTOM;
- }
- }
- if (HTNOWHERE == *result)
- {
- return false;
- }
- return true;
- }
- break;
- case WM_GETMINMAXINFO:
- {
- MINMAXINFO *mmi = (MINMAXINFO*)(msg->lParam);
- QRect desktop = qApp->desktop()->availableGeometry(this);
- QRect desktopRect = qApp->desktop()->screenGeometry(this);
- mmi->ptMaxSize.x = desktop.width();
- mmi->ptMaxSize.y = desktop.height();
- int desktopLeft = desktop.left() - desktopRect.left();
- int desktopTop = desktop.top() - desktopRect.top();
- mmi->ptMaxPosition.x = desktopLeft;
- mmi->ptMaxPosition.y = desktopTop;
- mmi->ptMinTrackSize.x = FRAME_MINI_WIDTH;
- mmi->ptMinTrackSize.y = FRAME_MINI_HEIGHT;
- mmi->ptMaxTrackSize.x = desktop.width();
- mmi->ptMaxTrackSize.y = desktop.height();
- result = ;
- return true;
- }
- break;
- case WM_SIZE:
- switch (msg->wParam)
- {
- case SIZE_MAXIMIZED:
- break;
- case SIZE_RESTORED:
- break;
- }
- break;
- }
- return QWidget::nativeEvent(eventType, message, result);
- #else
- return QWidget::nativeEvent(eventType, message, result);
- #endif
- }
Qt窗体引用window自带阴影边框效果的更多相关文章
- android 自定义shape 带阴影边框效果
在drawable 里面 建立一个 xml 直接复制 看效果 自己调试就可以 <?xml version="1.0" encoding="utf-8"?& ...
- QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)
QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...
- Qt之阴影边框(转)
原文地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101eoc7.html 阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知 ...
- Qt之圆角阴影边框
Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求. 这里是有一些门道的,尤其是,这里藏着一个很大的秘密. 这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG... https ...
- CSS——小三角带边框带阴影
乍一看,很简单,做小三角,首先想到的是利用border的transparent特性,可以制作出小三角的效果.但是注意,这个小三角本身就是边框制作出来的.怎么能在小三角的外边再加一层小边框呢.那就必须再 ...
- 无废话ExtJs 入门教程三[窗体:Window组件]
无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...
- 用CSS画一个带阴影的三角形的示例代码
1. 思路 怎么用CSS3画一个带阴影的三角形呢 ? 有童鞋说, 这还不简单吗 网上有很多解决方案, 但其实大多都是实现不太完美的, 存在一些问题 假设我们做一个向下的三角形箭头 常见的方法大致有两种 ...
- WPF 调用API修改窗体风格实现真正的无边框窗体
原文:WPF 调用API修改窗体风格实现真正的无边框窗体 WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm ...
- JS框架_(JQuery.js)带阴影贴纸标签按钮
百度云盘 传送门 密码:azo6 纯CSS带阴影贴纸标签按钮效果: <!doctype html> <html> <head> <meta charset=& ...
随机推荐
- Hadoop出现的错误及处理
1.local host is: (unknown); destination host is: "yun-ubuntu":8031; 原因:yun-ubuntu这个host 并不 ...
- English - Titanium Bike
The silver-gold triathlon bike was sitting in Kris's dining room next to the door. It had no kicksta ...
- Elasticsearch学习随笔(二)-- Index 和 Doc 查询新建API总结
本文着重总结Elasticsearch的常见API了,进行分析. Index API 初始化Index,设置shards和replica PUT http://localhost:9200/firew ...
- 基于vue2.0的一个豆瓣电影App
1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie ...
- 阅读MDN文档之布局(四)
Introducing positioning Static positioning Relative positioning Introducing top, bottom, left and ri ...
- C++中使用const修饰指针
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指 ...
- python基础(9):文件处理
很多软件都会有有对文件处理的功能.今天我们就来学习文件处理. 文件处理 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,可以将结果赋值给一个变量,这个变量我们称为句柄.这样我们就可以通过这个 ...
- lfcp——PB使用
场景:记录以备忘. 1 直接说明 pb连接说明:目前项目共有性能.功能.业务.联调四个环境.所以pb可以连接四个不同的数据库.1.copy一份pb程序,修改main.ini文件中的DBCONNECT/ ...
- 【Python】debug工具-pdb(转)
Debug功能对于developer是非常重要的,python提供了相应的模块pdb让你可以在用文本编辑器写脚本的情况下进行debug. pdb是python debugger的简称. 常用的一些命令 ...
- HDU1034 Candy Sharing Game
Problem Description A number of students sit in a circle facing their teacher in the center. Each st ...