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);
|