其实网上都有很多关于VC6.0下做软件有关图片的加载当然.bmp的每一本书windows程序设计都有,但是对于.JPG和.png方法也很多了,流程有时候对于刚刚用GDI+的人来说都不知道写的是什么,并且在什么地方加什么都没有很清楚的说明,下面我简单地说一下GDI+加载背景图片的步骤
首先做一个mfc但是你得有GDI+(有三个文件一个是Includes文件夹包含了有关GDI+的头文件还有一个文件夹Lib包含了GdiPlus.lib还有一个文件是gdiplus.dll)总共大小大概是2.13M,
第二
在StdAfx.h中加入
#define UNICODE#ifndef ULONG_PTR#define ULONG_PTR unsigned long*#endif#include "./Includes/GdiPlus.h"using namespace Gdiplus;#pragma comment(lib,".//Lib//GdiPlus.lib")//其中点是当前文件夹
第三在对话框的头文件加入
private: BLENDFUNCTION m_Blend; ULONG_PTR gdiplusToken; GdiplusStartupInput gdiplusStartupInput;
第四
OnInitDialog函数中加入 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
在对话框的析构函数中加入
GdiplusShutdown(gdiplusToken);
在OnCreate函数中加入
//初始化gdiplus的环境 // Initialize GDI+. m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000 m_Blend.BlendFlags=0; //nothingelseisspecial... m_Blend.AlphaFormat=1; //... m_Blend.SourceConstantAlpha=255;//AC_SRC_ALPHA
下面的工作就是绘制背景图片了(我的图片放在工程的res文件夹中因为下面我用的是相当路径.当然你可以用绝对路径)
在OnPaint函数中绘制对话框的背景图
CPaintDC dc(this); // device context for painting这句是函数原来有的不用我们加 // TODO: Add your message handler code here Graphics mGraphics(dc.GetSafeHdc()); Image m_pImageback1(L"./res/http_imgloadCAGE3IVJ.jpg",TRUE);//这里的"./res/http_imgloadCAGE3IVJ.jpg"就是相当
//路径也可以是png图片 CRect rcClient; GetClientRect(&rcClient); mGraphics.DrawImage(&m_pImageback1,0,0,rcClient.Width(),rcClient.Height());
在OnCtlColor函数中是绘制控件的背景绘制button控件的时候要把它属性里面的一个OWNERDRAW属性打钩上 if(pWnd->GetDlgCtrlID()==IDC_STATIC2)//获取ID要是ID为IDC_STATIC要改为其他才能绘制背景 { Graphics mGraphics(pDC->m_hDC); Image m_pImageback1(L"./res/http_imgloadCAHY80AQ.jpg",TRUE); CRect rcClient; GetDlgItem(IDC_STATIC2)->GetWindowRect(&rcClient); ScreenToClient(&rcClient); pDC->SetBkMode(TRANSPARENT);//这句是绘制背景透明很重要 mGraphics.DrawImage(&m_pImageback1,0,0,rcClient.Width(),rcClient.Height()); return (HBRUSH)GetStockObject(NULL_BRUSH); //这句是返回透明画刷 } if(pWnd->GetDlgCtrlID()==IDC_BUTTON1)//记住要是按钮要把他的那个OWNERDRAW属性选上
{ Graphics mGraphics(pDC->m_hDC); Image m_pImageback1(L"./res/http_imgloadCAHY80AQ.jpg",TRUE); CRect rcClient; GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rcClient); ScreenToClient(&rcClient); pDC->SetBkMode(TRANSPARENT); mGraphics.DrawImage(&m_pImageback1,0,0,rcClient.Width(),rcClient.Height()); return (HBRUSH)GetStockObject(NULL_BRUSH); }
当然上面只是我对部分控件的代码其他控件操作一样!
下面是我的工程的截图
下面是我的工程的截图