public:
CBitmap m_bmp;
BOOL CDisplayPic::OnInitDialog()
{
CDialog::OnInitDialog();
if( m_bmp.m_hObject != NULL )
m_bmp.DeleteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if( hbmp == NULL )
return FALSE;
m_bmp.Attach( hbmp );
void CDisplayPic::OnPaint()
{
CPaintDC dc(GetDlgItem(IDC_STATIC1)); //此处为你的static 的ID
//用HBITMAP类来实现动态加载,只支持BMP/
CRect rcclient;
GetDlgItem(IDC_STATIC1)->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 );
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();
// Do not call CDialog::OnPaint() for painting messages
}
1。先派生一个CStatic类
2。在该派生类中定义一个接口函数,比如:
CBitmap m_bitmap ;
BOOL ShowImageInStatic(HBITMAP hBitmap)
{
m_bitmap.Detach();
if ( ! m_bitmap.Attach ( hBitmap ) )
{
return false;
}
return true;
}
3.CStaticL::OnPaint()中
{
CPaintDC dc(this);
BITMAP bmInfo;
::GetObject( m_bitmap.m_hObject, sizeof(BITMAP), &bmInfo );
INT nWidth, nHeigh;
nWidth = bmInfo.bmWidth;
nHeigh = bmInfo.bmHeight;
CDC pDC;
pDC.CreateCompatibleDC(&dc);
pDC.SelectObject(&m_bitmap);
dc.BitBlt(0, 0, nWidth, nHeigh, &pDC, 0, 0, SRCCOPY);
}
//将pStatic指向要显示的地方
CStatic *pStaic=(CStatic*)GetDlgItem(IDC_BMPRECT_STATIC);
//装载资源
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),csPath,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hbmp.Attach(hbitmap);
//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);
CDC dcMem ,*pDC;
dcMem.CreateCompatibleDC(GetDC());
pDC = pStaic->GetDC();
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
CRect lRect;
lRect.left = 0;
lRect.top = 0;
lRect.right = bm.bmWidth;
lRect.bottom = bm.bmHeight;
lRect.NormalizeRect();
//显示位图
pDC->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);