<1>.工程pro文件添加Dwmapi.lib

  1. LIBS += Dwmapi.lib

<2>.窗体控件添加系统函数

  1. #ifdef Q_OS_WIN
  2. #include <Dwmapi.h> // Use system shadow frame
  3. #endif
  4.  
  5. TMainWindow::TMainWindow(QDialog *parent)
  6. : QDialog(parent)
  7. {
  8. #ifdef Q_OS_WIN
  9. BOOL bEnable = false;
  10. ::DwmIsCompositionEnabled(&bEnable);
  11. if (bEnable)
  12. {
  13. DWMNCRENDERINGPOLICY ncrp = DWMNCRP_ENABLED;
  14. ::DwmSetWindowAttribute((HWND)winId(), DWMWA_NCRENDERING_POLICY, &ncrp, sizeof(ncrp));
  15. MARGINS margins = { - };
  16. ::DwmExtendFrameIntoClientArea((HWND)winId(), &margins);
  17. }
  18. #endif
  19. }

<3>.边框拖拽功能

  1. #define MWS_SYS_DRAG_WIDTH 4 //边框响应鼠标间距
  2. #define FRAME_MINI_WIDTH 1024 //窗体默认最小宽度
  3. #define FRAME_MINI_HEIGHT 768 //窗体默认最小高度
  4. bool TMainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
  5. {
  6. #ifdef Q_OS_WIN
  7. MSG *msg = reinterpret_cast<MSG*>(message);
  8. switch (msg->message)
  9. {
  10. case WM_NCHITTEST:
  11. {
  12. QPoint p = mapFromGlobal(QCursor::pos());
  13. int xPos = p.x();
  14. int yPos = p.y();
  15. int nHeigh = height();
  16. int nWidth = width();
  17.  
  18. *result = HTNOWHERE;
  19.  
  20. if (!isFullScreen() && !isMaximized())
  21. {
  22. if (xPos >= && xPos < MWS_SYS_DRAG_WIDTH){
  23. if (yPos >= && yPos < MWS_SYS_DRAG_WIDTH)
  24. {
  25. *result = HTTOPLEFT;
  26. }
  27. else if (yPos >= (nHeigh - MWS_SYS_DRAG_WIDTH) && yPos <= nHeigh)
  28. {
  29. *result = HTBOTTOMLEFT;
  30. }
  31. else
  32. {
  33. *result = HTLEFT;
  34. }
  35. }
  36.  
  37. if (xPos >= nWidth - MWS_SYS_DRAG_WIDTH && xPos <= nWidth)
  38. {
  39. if (yPos >= && yPos <= MWS_SYS_DRAG_WIDTH)
  40. {
  41. *result = HTTOPRIGHT;
  42. }
  43. else if (yPos >= (nHeigh - MWS_SYS_DRAG_WIDTH) && yPos <= nHeigh)
  44. {
  45. *result = HTBOTTOMRIGHT;
  46. }
  47. else
  48. {
  49. *result = HTRIGHT;
  50. }
  51. }
  52.  
  53. if (xPos >= MWS_SYS_DRAG_WIDTH && xPos < nWidth - MWS_SYS_DRAG_WIDTH
  54. && yPos > && yPos < MWS_SYS_DRAG_WIDTH)
  55. {
  56. *result = HTTOP;
  57. }
  58.  
  59. if (xPos > MWS_SYS_DRAG_WIDTH && xPos < nWidth - MWS_SYS_DRAG_WIDTH
  60. && yPos >(nHeigh - MWS_SYS_DRAG_WIDTH) && yPos < nHeigh)
  61. {
  62. *result = HTBOTTOM;
  63. }
  64. }
  65. if (HTNOWHERE == *result)
  66. {
  67. return false;
  68. }
  69. return true;
  70. }
  71. break;
  72.  
  73. case WM_GETMINMAXINFO:
  74. {
  75. MINMAXINFO *mmi = (MINMAXINFO*)(msg->lParam);
  76.  
  77. QRect desktop = qApp->desktop()->availableGeometry(this);
  78. QRect desktopRect = qApp->desktop()->screenGeometry(this);
  79.  
  80. mmi->ptMaxSize.x = desktop.width();
  81. mmi->ptMaxSize.y = desktop.height();
  82.  
  83. int desktopLeft = desktop.left() - desktopRect.left();
  84. int desktopTop = desktop.top() - desktopRect.top();
  85.  
  86. mmi->ptMaxPosition.x = desktopLeft;
  87. mmi->ptMaxPosition.y = desktopTop;
  88.  
  89. mmi->ptMinTrackSize.x = FRAME_MINI_WIDTH;
  90. mmi->ptMinTrackSize.y = FRAME_MINI_HEIGHT;
  91.  
  92. mmi->ptMaxTrackSize.x = desktop.width();
  93. mmi->ptMaxTrackSize.y = desktop.height();
  94.  
  95. result = ;
  96.  
  97. return true;
  98. }
  99. break;
  100.  
  101. case WM_SIZE:
  102. switch (msg->wParam)
  103. {
  104. case SIZE_MAXIMIZED:
  105. break;
  106. case SIZE_RESTORED:
  107. break;
  108. }
  109. break;
  110. }
  111. return QWidget::nativeEvent(eventType, message, result);
  112. #else
  113. return QWidget::nativeEvent(eventType, message, result);
  114. #endif
  115. }

Qt窗体引用window自带阴影边框效果的更多相关文章

  1. android 自定义shape 带阴影边框效果

    在drawable 里面 建立一个 xml 直接复制 看效果 自己调试就可以 <?xml version="1.0" encoding="utf-8"?& ...

  2. QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

    QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...

  3. Qt之阴影边框(转)

    原文地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101eoc7.html 阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知 ...

  4. Qt之圆角阴影边框

    Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求. 这里是有一些门道的,尤其是,这里藏着一个很大的秘密. 这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG... https ...

  5. CSS——小三角带边框带阴影

    乍一看,很简单,做小三角,首先想到的是利用border的transparent特性,可以制作出小三角的效果.但是注意,这个小三角本身就是边框制作出来的.怎么能在小三角的外边再加一层小边框呢.那就必须再 ...

  6. 无废话ExtJs 入门教程三[窗体:Window组件]

    无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...

  7. 用CSS画一个带阴影的三角形的示例代码

    1. 思路 怎么用CSS3画一个带阴影的三角形呢 ? 有童鞋说, 这还不简单吗 网上有很多解决方案, 但其实大多都是实现不太完美的, 存在一些问题 假设我们做一个向下的三角形箭头 常见的方法大致有两种 ...

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

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

  9. JS框架_(JQuery.js)带阴影贴纸标签按钮

    百度云盘 传送门 密码:azo6 纯CSS带阴影贴纸标签按钮效果: <!doctype html> <html> <head> <meta charset=& ...

随机推荐

  1. asp.net mvc视图中使用entitySet类型数据时提示出错

    asp.net mvc5视图中使用entitySet类型数据时提示以下错误 检查了一下引用,发现已经引用了System.Data.Linq了,可是还是一直提示出错, 后来发现还需要在Views文件夹下 ...

  2. 集成 ssh第一阶段

    1.添加spring支持,包含spring-hibernate和spring-struts2.添加struts支持,包含struts-spring3.添加hibernate支持,在spring配置文件 ...

  3. jpg、jpeg、png... 的区别

    对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道. 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更有效的使用他们. 那他们到底是有什么区别?(一 ...

  4. Jmeter之分布式测试

    1)Jmeter 是纯java 应用,对于CPU和内存的消耗比较大,并且受到JVM的一些限制: 一般情况下,依据机器配置,单机的发压量为300-600,因此,当需要模拟数以千计的并发用户时,使用单台机 ...

  5. 大数据平台搭建-kafka集群的搭建

    本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...

  6. Go学习笔记(二)十分钟上手

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 变量&常量 变量 变量名由字母.数字.下划线组成,不能以数字开头. ... var ( A int //默 ...

  7. Java编程思想总结笔记The first chapter

    总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章  对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...

  8. jmeter- Java-POST接口使用get与json格式传参

    在测试过程中发现各种接口传参形式,今天就来说说小编遇到的一种,接口请求方式为POST:URL传参以GET形式并携带JSON 可能这样诉说有不少同学不太理解. 如图: 上图所示就是一般get请求传参格式 ...

  9. 取一个整数a从右端开始的4~7位

    题目:取一个整数a从右端开始的4-7位. 程序分析:可以这样考虑: (1)先使a右移4位. (2)设置一个低4位全为1,其余全为0的数.可用~(~0 < <4) (3)将上面二者进行&am ...

  10. AllPairs运用遇到的问题及解决办法分享

    前些天用AllPairs自动生成了交互式测试用例,中间遇到的问题困扰了一天,最后解决了.现在分享下解决过程 首先,D\AllPairs是我的ALLPairs安装目录,C盘桌面test.txt是我写的测 ...