本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9688911
建立时间:2004年12月20日




[c++]HBITMAP显示在一个CStatic上
原创空间

邢红瑞 发表于 2004/12/28 17:45:30

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


阅读全文(13810) | 回复(3) | 编辑 | 精华
 


回复:HBITMAP显示在一个CStatic上
原创空间

雪(游客)发表评论于2008/11/20 17:48:58

看不懂


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:HBITMAP显示在一个CStatic上
原创空间

邢红瑞发表评论于2006/8/10 13:58:18

你能看明白吗

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:HBITMAP显示在一个CStatic上
原创空间

S(游客)发表评论于2006/8/10 13:18:11

写得很乱。。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144759851 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号