1、首先创建一个基于对话框的MFC Project
2、定义一个全局的CBitmap对象
3、在合适的地方将BMP图片装入,并使用CBitmap的Attach方法
4、在窗口的OnPaint方法中,进行以下处理
a、创建一个设备内存区(CDC 对象的 CreateCompatibleDC 方法),再利用 CBitmap 的CreateCompatibleBitmap方法初始化一个位图。执行设备的 SelectObject 方法为设备内存选择对象。
b、DefWindowProc 调用窗口 WM_PAINT 过程,发送消息。
c、再创建一个 CDC 对象,分别调用 CreateCompatibleDC 和 CreateBitmap 方法装入位图,执行设备的
SelectObject 方法为设备内存选择对象。
d、调用 c 步骤的 CDC 对象的 BitBlt 方法做图像显示预处理。
e、创建一个画刷,执行设备的 BitBlt 方法将图显示出来。
代码如下
-----------------------------------------
定义全局变量
-----------------------------------------------------------------------
CBitmap m_bmp;
装入图片部分
------------------------------------------------------------------------
if( m_bmp.m_hObject != NULL )//判断
m_bmp.DeleteObject();
/载入图片
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
_T("1.bmp"),
IMAGE_BITMAP,
0,
0,
LR_CREATEDIBSECTION|LR_LOADFROMFILE);
//if( hbmp == NULL )
// return FALSE;
///该断程序用来取得加载的BMP的信息
m_bmp.Attach( hbmp );
DIBSECTION ds;
BITMAPINFOHEADER &bminfo = ds.dsBmih;
m_bmp.GetObject( sizeof(ds), &ds );
int cx=bminfo.biWidth; //得到图像宽度
int cy=bminfo.biHeight; //得到图像高度
/得到了图像的宽度和高度后,我们就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张图片///
CRect rect;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);
ScreenToClient(&rect);
CBMPTestDlg::MoveWindow(rect.left,rect.top,cx+100,cy+300,true);
GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小
OnPaint 函数部分
------------------------------------------------------------------------
//CDialog::OnPaint();
//以下三种情况任选一种会是不同效果(只能一种存在)///
//CPaintDC dc(this); //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.
CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上
//CDC dc;
//dc.m_hDC=::GetDC(NULL); //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上///
CRect rcclient;
GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient); //获取控件的大小
//
//以下 5 行创建一个位图
CDC memdc;
memdc.CreateCompatibleDC(&dc); //创建一个设备内存区
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,rcclient.Width(),rcclient.Height());//初始化一个位图,于设备(本例中为 PictureBox)具有相同的调色板和分辨率
memdc.SelectObject( &bitmap );
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(),
rcclient.Height(),
1,
1,
NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt(0,
0,
rcclient.Width(),
rcclient.Height(),
&memdc,
rcclient.left,
rcclient.top,
SRCCOPY);
CBrush brush;
brush.CreatePatternBrush(&m_bmp);
dc.FillRect(rcclient, &brush);
dc.BitBlt(rcclient.left,
rcclient.top,
rcclient.Width(),
rcclient.Height(),
&memdc,
rcclient.left,
rcclient.top,
SRCPAINT);
brush.DeleteObject();
来自: http://hi.baidu.com/qizlee/blog/item/093738d7366cbadca144df04.html