当前位置:C++技术网 > 资讯 > 基于MFC基本对话框添加png背景图片

基于MFC基本对话框添加png背景图片

更新时间: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);
   
    加载PNG图片: 
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图片的背景了。