<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自带阴影边框效果的更多相关文章

  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. xhr.readyState的就绪状态

    0:初始化,XMLHttpRequest对象还没有完成初始化 1:载入,XMLHttpRequest对象开始发送请求 2:载入完成,XMLHttpRequest对象的请求发送完成 3:解析,XMLHt ...

  2. redis源码笔记(一) —— 从redis的启动到command的分发

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/redis1 本博客同步在http://www.cnblog ...

  3. 3,Spring Boot热部署

    问题的提出: 在编写代码的时候,你会发现我们只是简单把打印信息改变了,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来就真的是打几个Hello World就下班了.那么如何解决热部署的问题呢 ...

  4. rsync随机启动脚本

    服务端 #!/bin/sh # chkconfig: # description: Saves and restores system entropy pool for \ #create by xi ...

  5. Missing number - 寻找缺失的那个数字

    需求:给出一个int型数组,包含不重复的数字0, 1, 2, ..., n:找出缺失的数字: 如果输入是[0, 1, 2] 返回 3 输入数组 nums = [0, 1, 2, 4] :应该返回 3 ...

  6. Mybatis初学笔记

    MyBatis环境搭建:1.需要mybatis-3.3.0.jar,将该jar包导入web工程的libs文件夹中:2.在src下新建一个mybatis-config.xml文件,mybatis的基本配 ...

  7. [C++ Calculator 项目] 初试

    Calculator V1.0 注:这是一个C++计算器项目的初始部分. 大体功能简介: 能够输入一串数学表达式 逐字符扫描,提取数字和符号得到一组队列 逐行输出提取的符号与数字 实现代码如下: sc ...

  8. 安卓平台使用pocketSphinx离线语音识别

    版权声明:本文为elecdog原创文章,可以转载,但必须在明确位置注明出处!谢谢合作. 关于语音识别,国内已经有比较好的公司推出相关的服务了,比如百度免费的离在线融合语音识别以及讯飞收费的在线和离线语 ...

  9. Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

    看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...

  10. CentOS 7.3.1611系统安装配置图解教程

    操作系统:CentOS 7.3.1611 IP地址:192.168.21.130 网关:192.168.21.2 DNS:8.8.8.8 8.8.4.4 备注: CentOS 7.x系列只有64位系统 ...