其实网上都有很多关于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);
}
当然上面只是我对部分控件的代码其他控件操作一样!
下面是我的工程的截图
下面是我的工程的截图