(1)从文件中加载图片

void CScale3DCUserManageView::OnDraw(CDC* pDC){	// TODO: 在此添加专用代码和/或调用基类	CImage image; //创建图片类  	USES_CONVERSION;	INT re = _access(W2A(m_strUserPicPath), 0);//判文件是否存在	if (re == -1)return;	image.Load(m_strUserPicPath); //根据图片路径加载图片  	CRect rect;//定义矩形类  	int cx = image.GetWidth();//获取图片宽度  	int cy = image.GetHeight();//获取图片高度  	m_picUserIcon.GetClientRect(&rect);//获得pictrue控件所在的矩形区域  	CDC *pDC1 = m_picUserIcon.GetDC();//获得pictrue控件的DC  	rect.right = rect.left + 126;	rect.bottom = rect.top + 126;	image.Draw(pDC1->m_hDC, rect); //将图片画到Picture控件表示的矩形区域  	ReleaseDC(pDC1);//释放picture控件的DC  }

(2)将CImage转成HBITMAP,代码如下:

CImage img;CBitmap  bitmap;img.Load(strIcon);HBITMAP hbmp = (HBITMAP)img.operator HBITMAP();

在要HBITMAP的地方使用.

(3)和用CImage缩小图像,代码如下:

m_img.Load(strIcon);//CImage从路径中加载图片m_iconImage.Create(32, 32, 32);//CImage相当于创一幅空白图片m_img.StretchBlt(m_iconImage.GetDC(), CRect(0,0,32,32));//画图m_iconImage.ReleaseDC();//释放pAppButton->SetImage(m_iconImage.operator HBITMAP());//画到主按钮上

(4)CImage取出DLL中的位图资源并显示,如下:

#include 
//在.h中声明CImge类的变量可能需要HINSTANCE temp = AfxGetResourceHandle();AfxSetResourceHandle(GetModuleHandle(_T("Scale3DCDeviceManage")));//DLL名称m_img.LoadFromResource(AfxGetResourceHandle(), IDB_BITMAP7);AfxSetResourceHandle(temp);//将图片显示到窗口上CPaintDC dc(this); m_img.SetTransparentColor(RGB(255, 255, 255));//透明色m_img.TransparentBlt(dc.m_hDC, CRect(5, 5, 40, 40));

(5)图像上有CStatic控件,需要局部刷新图像控件

CRect rt;m_staTitle.GetWindowRect(&rt);ScreenToClient(&rt);InvalidateRect(rt);

(6)取出资源中的PNG图片,并显示到Pictrue控件上.

BOOL CInstallDlg::LoadImageFromResource(ATL::CImage *pImage, UINT nResID, LPCTSTR lpTyp){	if(pImage == NULL)return false;	pImage->Destroy();	// 查找资源	HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);	if (hRsrc == NULL)return false;	// 加载资源	HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);	if (hImgData == NULL)	{		::FreeResource(hImgData);		return false;	}	// 锁定内存中的指定资源	LPVOID lpVoid    = ::LockResource(hImgData);	LPSTREAM pStream = NULL;	DWORD dwSize     = ::SizeofResource(AfxGetResourceHandle(), hRsrc);	HGLOBAL hNew     = ::GlobalAlloc(GHND, dwSize);	LPBYTE lpByte    = (LPBYTE)::GlobalLock(hNew);	::memcpy(lpByte, lpVoid, dwSize);	//解除内存中的指定资源	::GlobalUnlock(hNew);	//从指定内存创建流对象	HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);	if (ht != S_OK)	{		GlobalFree(hNew);	}	else	{		// 加载图片		pImage->Load(pStream);		GlobalFree(hNew);	}	// 释放资源	::FreeResource(hImgData);	return true;}void CInstallDlg::OnTimer(UINT_PTR nIDEvent){	// TODO: 在此添加消息处理程序代码和/或调用默认值	static INT  uID = IDB_PNG1;	LoadImageFromResource(&m_img, uID, _T("PNG"));	SendMessage(WM_PAINT, 0, 0);	SendMessage(WM_ERASEBKGND, 0, 0);	uID++;	if (uID >= IDB_PNG4)uID = IDB_PNG1;	CDialogEx::OnTimer(nIDEvent);}

显示到图片控件中,如下

void CInstallDlg::OnPaint(){	CPaintDC  dc(this);	CRect  rect;	CDC *pDC1 = m_pic.GetDC();//获得pictrue控件的DC  	rect.top    = 260;	rect.left   = 0;	rect.right  =  600;	rect.bottom = 260+ 328;	m_img.SetTransparentColor(RGB(255, 255, 255));	//m_img.Draw(pDC1->m_hDC, rect); //将图片画到Picture控件表示的矩形区域  	m_img.TransparentBlt(pDC1->m_hDC, rect);	ReleaseDC(pDC1);//释放picture控件的DC  }

图片控件刷新后,才能显示,如下:

SendMessage(WM_PAINT, 0, 0);	SendMessage(WM_ERASEBKGND, 0, 0);