原理:使用SetWindowLong 设置WS_EX_LAYERED,将对话框设置成层级窗口。
分为两层:
后层为背景窗口,使用GDI+显示图片。显示成功后再用UpdateLayeredWindow函数进行透明处理。并在这个对话框中定义一个子对话框对象,子对话框用来作为前景窗口。
前景为另一层,用来放各种控件。
1、在stdafx.h中加入以下代码:
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
我的项目名为CTestTransparent,所以在CTestTransparentApp中加入成员变量
ULONG_PTR m_gdiplusToken;
在BOOL CTestTransparentApp::InitInstance()中加入这两行:
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
记住在退出时要御掉GDI+,它很占资源的,在int CTestTransparentApp::ExitInstance() 中加入这行:
GdiplusShutdown(gdiplusToken);
2、在背景层上画图片,CTestTransparentDlg是有标题。
在BOOL CTestTransparentDlg::OnInitDialog()里面加入如下代码:
MoveWindow(50