这个框框好像删不掉,就先放这边吧。。。
 
#define WIN32_LEAN_AND_MEAN
#include <unknwn.h>
#include <windows.h>
#include <dwmapi.h>
#include <gdiplus.h>
#include <objidl.h> using namespace Gdiplus; #pragma comment(lib, "dwmapi.lib")
#pragma comment(lib, "gdiplus.lib") INT_PTR CALLBACK MyDialogProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam); int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine,
_In_ int nCmdShow) {
// Initialize GDI+
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdipToken = 0;
Gdiplus::GdiplusStartup(&gdipToken, &gdiplusStartupInput, nullptr); struct MyDialog : DLGTEMPLATE {
WORD dummy[3] = {0}; // unused menu, class and title
} dlg;
dlg.style = WS_POPUP | WS_CAPTION | DS_CENTER;
dlg.dwExtendedStyle = 0;
dlg.cdit = 0; // no controls in template
dlg.x = 0;
dlg.y = 0;
dlg.cx = 300; // width in dialog units
dlg.cy = 200; // height in dialog units DialogBoxIndirectW(hInstance, &dlg, nullptr, MyDialogProc); Gdiplus::GdiplusShutdown(gdipToken); return 0;
} INT_PTR CALLBACK MyDialogProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam) {
switch (message) {
case WM_INITDIALOG: {
SetWindowTextW(hDlg, L"Borderless Window with Shadow"); // This plays together with WM_NCALCSIZE.
MARGINS m{0, 0, 0, 1};
DwmExtendFrameIntoClientArea(hDlg, &m); // Force the system to recalculate NC area (making it send WM_NCCALCSIZE).
SetWindowPos(hDlg, nullptr, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE |
SWP_FRAMECHANGED);
return TRUE;
}
case WM_NCCALCSIZE: {
// Returning 0 from the message when wParam is TRUE removes the standard
// frame, but keeps the window shadow.
if (wParam == TRUE) {
SetWindowLong(hDlg, DWL_MSGRESULT, 0);
return TRUE;
}
return FALSE;
}
case WM_PAINT: {
PAINTSTRUCT ps{0};
HDC hdc = BeginPaint(hDlg, &ps); // Draw with GDI+ to make sure the alpha channel is opaque.
Gdiplus::Graphics gfx{hdc};
Gdiplus::SolidBrush brush{Gdiplus::Color{255, 255, 255}};
int x = ps.rcPaint.left;
int y = ps.rcPaint.top;
int width = ps.rcPaint.right - ps.rcPaint.left;
int height = ps.rcPaint.bottom - ps.rcPaint.top;
gfx.FillRectangle(&brush, x, y, width, height); EndPaint(hDlg, &ps);
return TRUE;
}
case WM_NCHITTEST: {
// Returning HTCAPTION allows the user to move the window around by
// clicking anywhere. Depending on the mouse coordinates passed in LPARAM,
// you may return other values to enable resizing.
SetWindowLong(hDlg, DWL_MSGRESULT, HTCAPTION);
return TRUE;
}
case WM_COMMAND: {
WORD id = LOWORD(wParam);
if (id == IDOK || id == IDCANCEL) {
EndDialog(hDlg, id);
return TRUE;
}
return FALSE;
}
}
return FALSE; // return FALSE to let DefDialogProc handle the message
}

结果:

相关文章: Borderless Window with Drop Shadow

github上另外一篇教程:https://github.com/melak47/BorderlessWindow#borderlesswindow

拓展:

如果想要启用drop shadow效果,可以使用CS_DROPSHADOW样式,子窗口不可用。

   ULONG_PTR cNewStyle = GetClassLongPtr(hWnd, GCL_STYLE) | CS_DROPSHADOW;
SetClassLongPtr(hWnd, GCL_STYLE, cNewStyle);

win32 - 创建带有标准阴影的无边框窗口的更多相关文章

  1. 让Qt的无边框窗口支持拖拽、Aero Snap、窗口阴影等特性

    环境:Desktop Qt 5.4.1 MSVC2013 32bit 需要的库:dwmapi.lib .user32.lib 需要头文件:<dwmapi.h> .<windowsx. ...

  2. 如何在pyqt中给无边框窗口添加DWM环绕阴影

    前言 在之前的博客<如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果>中,我们实现了窗口的亚克力效果,同时也用SetWindowC ...

  3. 如何在pyqt中在实现无边框窗口的同时保留Windows窗口动画效果(一)

    无边框窗体的实现思路 在pyqt中只要 self.setWindowFlags(Qt.FramelessWindowHint) 就可以实现边框的去除,但是没了标题栏也意味着窗口大小无法改变.窗口无法拖 ...

  4. 【转】MFC 无边框窗口的拖动

    MFC中无边框窗口的拖动 void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDO ...

  5. electron关于无边框窗口无法拖拽移动以及点击事件失效的问题

    为了使窗口无边框,使得在某些时候让项目看起来更美观,所以在创建窗口的时候通过设置 frame 属性的值为 false 来创建无边框窗口.但是无边框窗口会产生无法移动的问题,对于这个问题我们可以在渲染进 ...

  6. pyqt5设计无边框窗口(一)

    import sys from PyQt5 import QtGui,QtCore from PyQt5 import QtCore, QtGui, QtWidgets ############### ...

  7. 如何在pyqt中自定义无边框窗口

    前言 之前写过很多关于无边框窗口并给窗口添加特效的博客,按照时间线罗列如下: 如何在pyqt中实现窗口磨砂效果 如何在pyqt中实现win10亚克力效果 如何在pyqt中通过调用SetWindowCo ...

  8. WPF系列:无边框窗口

    <Window x:Class="Ares.Animations.Window3" xmlns="http://schemas.microsoft.com/winf ...

  9. Qt5:无边框窗口拖动

    在窗口程序中,无边框窗口程序一般需要特殊处理才能拖动 Qt中,要实现无边框窗口的拖动,需要重新实现 mousePressEvent 和 mouseMoveEvent 俩虚函数 void Widget: ...

  10. 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动

    在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...

随机推荐

  1. [转帖]TiKV 多副本丢失以及修复实践

    https://tidb.net/blog/ad45bad9#6%E6%80%BB%E7%BB%93 1实验目的 随着tidb使用场景的越来越多,接入的业务越来越重要,不由得想试验下tidb组件的高可 ...

  2. [转帖]十大主流Nehalem服务器横评(多图)

    https://server.51cto.com/article/201820.html 作者:佚名2010-05-25 09:52:27 运维服务器运维 除了我们的两台基准服务器之外,本次横向评测活 ...

  3. [转帖]Linux性能测试之unixbench

    https://www.modb.pro/db/487945 大家好,昨天为大家带来了一篇关于在Linux下性能测试的文章<性能测试之LTP>,今天继续为大家推荐系列工具之unixbenc ...

  4. HTTPD 搭建正向代理 使无网络访问权限的服务器能够访问互联网服务的快捷办法

    背景 公司有保密要求比较高,数据安全要求比较高的企业客户,要求核心业务服务器部允许直接访问互联网,但是因为我们有一些OCR识别以及发票查验等的场景需要连接云端的服务才可以正常使用, 所以这里面就存在安 ...

  5. 容器方式运行Mysql8.0.26的方法

    容器化运行Mysql8.0.26测试环境的方法 1. 前言 之前为了好处理,都是二进制包的方式安装mysql,但是有时候需要下载和安装也比较费时费力, 今天中午在弄Oracle RAC时想着以后能够容 ...

  6. 小程序字节转GBK及UTF8

    前段时间在Android原生搞的BLE扫码枪又要移植到小程序上来.本以为小程序不支持BLE的,结果一搜,还真支持-_-|| . 蓝牙部分问题不大,遇到的主要问题是,小程序环境如何对字符编码进行判断以及 ...

  7. 【K哥爬虫普法】大众点评VS百度地图,论“数据权属”对爬虫开发的罪与罚!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知 ...

  8. 洛谷P3101 题解

    输入格式 第 \(1\) 行,三个整数 \(m,n,t\). 第 \(2\) 到 \(m+1\) 行,\(m\) 个整数,表示海拔高度. 第 \(2+m\) 到 \(2m+1\) 行,\(m\) 个整 ...

  9. c和c++编译器之gcc和mingw

    三大编译器:gcc,llvm,clang 什么是gcc? gcc 官方网站:https://gcc.gnu.org GCC(GNU Compiler Collection,GNU编译器套件),是由 G ...

  10. 使用C#做为游戏开发的服务器语言方案

    Scut开源服务器 开源C#/Python/Lua 手游服务器 主页:http://www.scutgame.com/index.html 开源:https://github.com/ScutGame ...