使用静态文本控件 + picture控件显示位图的函数封装如下:
其中OnChangePic函数支持位图根据控件大小缩放,主要用到的是StretchBlt函数。
//<span style="font-family: Arial, Helvetica, sans-serif;">IDC_PIC2是静态文本控件的ID;</span><span style="font-family: Arial, Helvetica, sans-serif;">IDB_PIC是位图资源的ID</span>
void CXXXDlg::OnShowStaticBitmap()
{
//获得指向静态控件的指针
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_PIC2);
//获得位图句柄
HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_PIC));
//设置静态控件的样式,使其可以使用位图,并试位标显示使居中
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
//设置静态控件显示位图
pStatic->SetBitmap(hBitmap);
}
//<span style="font-family: Arial, Helvetica, sans-serif;">IDB_PICTURE是位图资源的ID,</span><span style="font-family: Arial, Helvetica, sans-serif;">IDC_PIC4是Picture控件的ID</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
void CXXXTDlg::OnChangePic(UINT IDB_PICTURE)
{
Invalidate();
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_PICTURE);//加载位图
CPaintDC dc(this);
CRect r;
GetDlgItem(IDC_PIC4)->GetWindowRect(&r);//获得控件客户窗口大小
ScreenToClient(&r);
HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH);
::FillRect(dc.m_hDC,&r,brush);//填充背景
dc.SetStretchBltMode(HALFTONE);
//将位图选进内存DC中
CDC memdc;
memdc.CreateCompatibleDC( &dc );
CBitmap* pOldBmp= memdc.SelectObject(&m_bmp);
//获得位图参数
BITMAP bmp;
m_bmp.GetBitmap(&bmp);
dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
memdc.SelectObject(pOldBmp);//还原画刷
}