HBITMAP显示在一个CStatic上

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值