使用 picture 控件动态显示图片方法
一 控件适应于图片尺寸
添加一个 picture 控件,修改 ID 为 IDC-PICTURE,并添加一 CBitmap m_bmp 成员变量
在 OnInitDialog()函数中添加如下代码
if(m_bmp.m_hObject!=NULL) m_bmp.DeleteObject();
//以绝对路径加载 BMP 图片
HBITMAP
hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP,
0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE);
if(hbmp==NULL) return false;
//获得加载位图的文件信息
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_PICTRUE)->GetWindowRect(&rect);//获得控件所在矩形区域
ScreenToClient(&rect);
GetDlgItem(IDC_PICTRUE)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整控件大小
在 OnPaint()函数中添加如下代码
//三种方法获得 pictrue 控件 DC,图象将被绘制在控件上
CPaintDC dc(GetDlgItem(IDC_PICTRUE));
//CPaintDC dc(this);
//CDC dc;
//dc.m_hDC=::GetDC(NULL);
CRect rcclient;
GetDlgItem(IDC_PICTRUE)->GetClientRect(&rcclient);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,rcclient.Width(),rcclient.Height());
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);