//贝神杰作,仅作记录,以后学习
#define GDIPVER 0x0110 //定义高版本的GDI+(1.1)
#include <tchar.h>
#include <windows.h>
#include <ObjIdl.h>
#include <stdio.h>
#include <GdiPlus.h>
#pragma comment(lib,"GdiPlus.lib")
using namespace Gdiplus;
#include <dwmapi.h>
#pragma comment(lib,"dwmapi.lib")
//Aero效果是否已启用
BOOL IsCompositionEnabled()
{
BOOL bEnabled,bResult;
bResult = (SUCCEEDED(DwmIsCompositionEnabled(&bEnabled)) && bEnabled);
return bResult;
}
//对已分层的窗口启动玻璃效果
HRESULT EnableBlurBehindWindow(HWND hWnd, //窗口句柄
BOOL bEnable = TRUE, //启用或禁用
HRGN hRgn = 0, //模糊窗体中某个区域
BOOL bTransitionOnMaximized = FALSE) //最大化时是否启用
{
DWM_BLURBEHIND blurBehind = { 0 };
blurBehind.dwFlags = DWM_BB_ENABLE | DWM_BB_TRANSITIONONMAXIMIZED;
blurBehind.fEnable = bEnable;
blurBehind.fTransitionOnMaximized = bTransitionOnMaximized;
if (bEnable && hRgn != NULL)
{
blurBehind.dwFlags |= DWM_BB_BLURREGION;
blurBehind.hRgnBlur = hRgn;
}
return DwmEnableBlurBehindWindow(hWnd,&blurBehind);
}
LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
HDC hDC = GetDC(hWnd);
//获得窗口宽高
RECT rcClient;
GetClientRect(hWnd,&rcClient);
UINT uWidth,uHeight;
uWidth = rcClient.right - rcClient.left;
uHeight = rcClient.bottom - rcClient.top;
//创建一个和窗口宽高相同的内存DC并创建相应位图
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC,uWidth,uHeight);
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hMemDC,hBitmap);
SetBkMode(hMemDC, TRANSPARENT);
//对该内存DC进绘制Alpha图像
{
Gdiplus::Graphics grap(hMemDC);
Gdiplus::LinearGradientBrush lgb(
Point(0,0),
Point(0,uHeight),
Color(0,255,0,255),
Color(255,0,255,0));
grap.FillRectangle(&lgb,0,0,uWidth,uHeight);
SolidBrush b(Color(0xFF,0x00,0x00,0xFF)); //构造纯色画刷
FontFamily ff(L"Times New Roman"); //构造字体族
Font f( //构造字体
&ff, //字体族
24, //字体尺寸
FontStyleRegular, //字体样式
UnitPixel); //大小单元(像素)
PointF p(10.0F,20.0F); //构造精度点
grap.DrawString( //绘制字符串
L"Hello World!", //字符串
-1, //字符串长度(-1为以Null为结束符)
&f, //字体
p, //位置
&b); //颜色
}
{
LPCTSTR lpstrOut = _T("Hello World!!!");
RECT rc = { 100,100,300,120 };
SetTextColor( hMemDC, RGB(0xFF,0x00,0x00) | 0xFE000000 );
DrawText( hMemDC, lpstrOut, _tcslen(lpstrOut), &rc, DT_CENTER | DT_SINGLELINE | DT_VCENTER );
}
//设置透明效果
SIZE size = {uWidth,uHeight};
POINT point = {0,0};
BLENDFUNCTION BlendFunc;
BlendFunc.BlendOp = AC_SRC_OVER;
BlendFunc.BlendFlags = 0;
BlendFunc.SourceConstantAlpha = 0xFF;
BlendFunc.AlphaFormat = AC_SRC_ALPHA;
UpdateLayeredWindow(
hWnd,
NULL,
NULL,
&size,
hMemDC,
&point,
RGB(0,0,0),
&BlendFunc,
ULW_ALPHA);
if(IsCompositionEnabled() == TRUE)
{
EnableBlurBehindWindow(hWnd,TRUE);
}
//释放资源
SelectObject(hMemDC,hBitmapOld);
DeleteDC(hMemDC);
ReleaseDC(hWnd,hDC);
}
break;
case WM_PAINT:
{
PAINTSTRUCT PaintStruct;
HDC hDC = BeginPaint(hWnd,&PaintStruct);
//在此处添加重绘代码
EndPaint(hWnd,&PaintStruct);
}
break;
case WM_LBUTTONDOWN:
{
PostMessage( hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0 );
}
break;
case WM_DWMCOMPOSITIONCHANGED:
EnableBlurBehindWindow(hWnd,IsCompositionEnabled());
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
INT WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE, LPTSTR, INT)
{
//初使化GDI+ ----------------------------------------
ULONG_PTR GdiplusToken;
GdiplusStartupInput GdiplusStartupInput;
Status sResult = GdiplusStartup(&GdiplusToken, &GdiplusStartupInput, NULL);
if(sResult != Ok)return 0;
WNDCLASSEX WndClassEx =
{
sizeof(WNDCLASSEX), //窗口类大小
CS_HREDRAW | CS_VREDRAW, //水平和垂直重绘
WinProc, //窗口过程
0L, //窗口类扩展
0L, //窗口扩展
GetModuleHandle(NULL), //实例句柄
LoadIcon(NULL,IDI_APPLICATION), //默认的窗口大图标
LoadCursor(NULL,IDC_ARROW), //默认的窗口光标
(HBRUSH)GetStockObject(WHITE_BRUSH),//默认的窗口背景画刷
NULL, //默认的窗口菜单名称
_T("SimpleWindowClass"), //窗口类名
LoadIcon(NULL,IDI_APPLICATION) //默认的窗口小图像
};
RegisterClassEx(&WndClassEx);
HWND hWnd = CreateWindowEx(
WS_EX_LAYERED,
_T("SimpleWindowClass"), //使用的窗口类名
_T("Simple Window"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口样式
CW_USEDEFAULT, //默认的X坐标
CW_USEDEFAULT, //默认的Y坐标
CW_USEDEFAULT, //默认的宽度
CW_USEDEFAULT, //默认的高度
GetDesktopWindow(), //父窗口句柄 HWND_MESSAGE为隐藏窗口
NULL, //菜单句柄
WndClassEx.hInstance, //主模块句柄
NULL); //参数.
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG Msg;
do
{
GetMessage(&Msg, NULL, 0U, 0U);
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}while(Msg.message != WM_QUIT);
UnregisterClass(
_T("SimpleWindowClass"),
WndClassEx.hInstance);
//关闭GDI+ ----------------------------------------
GdiplusShutdown(GdiplusToken);
return 0;
}
实现效果:
分享到:
相关推荐
自适应操作系统,可在Win7系统下使用系统毛玻璃,在Win10下使用毛玻璃滤镜,其他系统下使用透明窗口,其中Win7下受系统的主题及颜色影响,毛玻璃的可定制性差,而在Win10下,毛玻璃颜色及透明度均可以自定义,不受...
需要注意的是,由于Firefox浏览器不支持`backdrop-filter`属性,开发者可能已经在JavaScript或CSS中提供了替代解决方案,比如使用Web组件或自定义函数来模拟毛玻璃效果。 总的来说,这个压缩包提供了一套完整的HTML...
在Windows 7操作系统中,微软引入了一种名为“Aero”的视觉风格,其中最具特色的就是“毛玻璃”(Aero Glass)效果。毛玻璃效果通过半透明的、模糊的背景,为用户界面带来了轻盈和现代感。在MFC(Microsoft ...
毛玻璃效果,也被称为模糊效果或者“Blur Effect”,在Android应用开发中被广泛用于创建具有视觉吸引力的用户界面。这种效果模拟了真实世界中的玻璃材料,通过模糊背景图像来突出前景元素,使得UI看起来更加现代和...
MFC实现的窗体毛玻璃效果。 实现的方法主要是使用以下函数: DwmExtendFrameIntoClientArea(...) 该函数实现将边框区域扩大到客户区,而此时边框区域的绘制,在windows vista和windows 7系统下在开启了毛玻璃效果...
毛玻璃成像的复原是光学领域中的一个重要研究课题,主要涉及通过模糊的介质恢复清晰图像的技术。在第六届光电设计大赛中,这个主题被作为竞赛项目,吸引了众多参赛者使用MATLAB等工具进行探索和实践。MATLAB是一种...
想在Win7下重画MFC应用程序界面及实现界面的毛玻璃效果,在网上溜达一下发现“用C++品尝Vista美味:界面地毛玻璃效果”,各大网站都是相互转载的同一篇文章。这篇文章是基于WTL实现的,其中有个默认主题句柄。而MFC...
在Android开发中,为了提升应用的视觉效果和用户体验,开发者经常使用各种特效,其中“局部毛玻璃透明效果”就是一种流行的设计风格。这种效果模仿了iOS中的“Blurry”技术,使得界面的一部分呈现出模糊透明的效果,...
在Windows Presentation Foundation (WPF) 中,实时毛玻璃(Live Blur)效果是一种视觉设计技术,它使得背景元素呈现出模糊的效果,常用于创建现代、透明且交互性强的用户界面。这种效果在Windows 8及更高版本的UI...
标题中的“窗口毛玻璃效果(c++源码加程序)”指的是使用C++编程语言实现的一种视觉效果,这种效果通常被称作“模糊效果”或“毛玻璃效果”。在现代操作系统如Windows 10中,这种效果常用于窗口背景,使得窗口下方的...
在网页设计中,引导页(Landing Page)常被用于吸引用户注意力、介绍产品或服务,而毛玻璃效果(也称为模糊背景或Blur Effect)则是一种流行的设计趋势,它通过在元素上应用模糊滤镜,创造出一种半透明且带有朦胧...
毛玻璃效果,又称模糊效果或Glassmorphism,是近年来在网页设计中流行的一种风格,它模仿了玻璃透明且带有微妙模糊感的特性,为用户界面带来了一种轻盈且现代的视觉体验。在这个"好看的毛玻璃效果的登陆界面"项目中...
在本文中,我们将深入探讨如何在Windows平台上使用Qt框架创建具有毛玻璃效果的半透明窗体。Qt是一个跨平台的应用程序开发框架,广泛应用于C++编程。毛玻璃效果,也称为模糊效果,常用于现代用户界面设计中,为用户...
自从iOS系统引入了Blur效果,也就是所谓的毛玻璃、模糊化效果、磨砂效果,各大系统就开始竞相模仿,这是怎样的一个效果呢,我们先来看一下,如下面的图片: 实现效果大家都知道了,如何在Android中实现呢,说白了...
本教程将探讨如何利用`QWidget`自定义一个带有独特头部设计和毛玻璃效果的窗口。毛玻璃效果,又称模糊效果,能为窗口提供半透明、朦胧的视觉体验,使界面更具现代感和美观度。 首先,我们需要理解`QWidget`的基本...
在Android开发中,实现图片的高斯模糊效果和毛玻璃效果是常见的需求,尤其是在创建具有现代感和美观界面的应用时。本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许...
在Android开发中,为了实现美观和独特的用户界面,开发者经常需要用到一些视觉效果,例如“毛玻璃”效果。这种效果在iOS系统中被称为“Blur”,在Android中也可以通过高斯模糊来实现。本篇文章将深入探讨如何在...
在本文中,我们将深入探讨如何使用QT C++库来实现毛玻璃效果,即窗口的透明度与模糊结合的视觉效果。这种技术常用于现代UI设计,以提供更优雅、时尚的用户界面。我们将通过分析“glassui”这个压缩包中的源代码来...
unity command buffer 实现毛玻璃特效,可用于3D物体或UI。
1. **毛玻璃效果**:毛玻璃,也称为模糊背景或磨砂玻璃效果,是通过CSS3的`filter`属性实现的,特别是使用`blur`和`brightness`滤镜。这种效果使背景图片变得模糊,同时保留前景元素的清晰度,增加视觉层次感。在本...