更新时间:2015-06-26 14:05:21浏览次数:1+次
第一次写文章,感觉可能有点乱,请各位多多包涵。
最近在研究磁盘容量检测的问题,但是基于MFC对话框界面显示有点太平淡了,想对界面进行换肤操作。所以想以此前借鉴的方法跟大家分享一下。
用GDI的库做的。
1、在项目目录下的stdafx.h中添加代码:
#include "gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
在项目名的App中添加全局变量:
ULONG_PTR gdiplusToken;
在::InitInstance()中添加:
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
2、在显示界面的Dlg类中添加代码
在头文件dlg.h定义
BLENDFUNCTION m_Blend;
HDC m_hdcMemory;
在其::OnInitDialog()函数中加入如下代码: //窗体样式为0x80000为层级窗体
DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
HDC hdcTemp=GetDC()->m_hDC;
m_hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,500,500);
SelectObject(m_hdcMemory,hBitMap);
//使用GDI+载入PNG图片
HDC hdcScreen=::GetDC (m_hWnd);
RECT rct;
GetWindowRect(&rct);
POINT ptWinPos={rct.left,rct.top};
Graphics graph(m_hdcMemory); //GDI+中的类
Image image(L"bk.png",TRUE); //GDI+中的类 bk.png图片自己选择的背景图片
graph.DrawImage(&image,0,0,400,300);
//使用UpdateLayerWindow进行窗口透明处理
HMODULE hFuncInst=LoadLibrary("User32.DLL");
typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
MYFUNC UpdateLayeredWindow;
UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInst,"UpdateLayeredWindow");
SIZE sizeWindow={400,300}; //对话框窗口大小
POINT ptSrc={0,0};
UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);
这样的就已经完成了在对话框上添加png图片的背景了。