MFC双缓冲显示位图
2014-06-04 19:16
411 查看
void CGraphicView::OnDraw(CDC* pDC) { CGraphicDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here CFont *oldFont = pDC->SelectObject(&m_font); pDC->TextOutW(0, 0, m_strFontName); pDC->SelectObject(oldFont); //显示位图代码;放到此处是在响应WM_DRAW消息时显示位图,当窗口改变时,程序需要先擦出背景,再显示位图; //与在响应WM_ERASEBKGND消息(擦出背景)时直接显示位图相比,时间要长,故出现闪屏效果更明显 //但WM_ERASEBKGND消息响应函数擦除背景时好像擦除不干净,可以将显示位图位置不占据整个view区尝试一下 /* CBitmap bitmap; bitmap.LoadBitmapW(IDB_TEMPER); BITMAP btm; bitmap.GetBitmap(&btm); CRect rect; GetClientRect(&rect); CDC dcCpt; dcCpt.CreateCompatibleDC(pDC); dcCpt.SelectObject(&bitmap); //pDC->BitBlt(100, 50, 600, 400, &dcCpt, 0, 0, SRCCOPY); pDC->StretchBlt(100, 50, rect.Width(), rect.Height(), &dcCpt, 0, 0, btm.bmWidth, btm.bmHeight, SRCCOPY); */ //双缓冲显示位图 CBitmap oldBitmap; oldBitmap.LoadBitmapW(IDB_TEMPER); BITMAP btm; oldBitmap.GetBitmap(&btm); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); //创建兼容DC dcCompatible.SelectObject(&oldBitmap); //位图选入兼容DC CDC bkDC; bkDC.CreateCompatibleDC(pDC); //创建包含兼容位图的兼容DC CBitmap bitmap; bitmap.CreateCompatibleBitmap(pDC, btm.bmWidth, btm.bmHeight); //创建兼容位图 bkDC.SelectObject(bitmap); bkDC.BitBlt(0,0,btm.bmWidth,btm.bmHeight, &dcCompatible, 0, 0, SRCCOPY); pDC->BitBlt(0,0,btm.bmWidth,btm.bmHeight, &bkDC, 0, 0, SRCCOPY); oldBitmap.DeleteObject(); bitmap.DeleteObject(); bkDC.DeleteDC(); dcCompatible.DeleteDC(); }
BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default /* //显示位图4步骤 CBitmap bitmap; bitmap.LoadBitmapW(IDB_TEMPER); BITMAP btm; bitmap.GetBitmap(&btm); CRect rect; GetClientRect(&rect); CDC dcCpt; dcCpt.CreateCompatibleDC(pDC); dcCpt.SelectObject(&bitmap); //pDC->BitBlt(100, 50, 600, 400, &dcCpt, 0, 0, SRCCOPY); pDC->StretchBlt(100, 50, rect.Width(), rect.Height(), &dcCpt, 0, 0, btm.bmWidth, btm.bmHeight, SRCCOPY); bitmap.DeleteObject(); dcCpt.DeleteDC(); */ return CView::OnEraseBkgnd(pDC); //return TRUE; //擦出了背景,则返回非0;否则调用基类函数会擦出已经显示的位图 }
相关文章推荐
- mfc 利用HBITMAP 和CBITMAP 显示位图文件(双缓冲)
- MFC中实现简单的位图显示、处理
- MFC显示位图(2-1)
- MFC中显示一张位图
- MFC中实现简单的位图显示
- MFC显示彩色拷贝位图的方法
- mfc 显示位图 与 双缓冲
- VS2008中MFC单文档显示位图
- MFC显示位图
- VS2010 MFC显示位图
- MFC显示位图(2-2)
- 双缓冲显示位图
- MFC---多种方式显示位图
- MFC下位图显示
- MFC绘图7--显示位图
- MFC显示位图
- mfc 利用HBITMAP 和CBITMAP 显示位图文件
- VC/MFC 如何将位图缩放显示在Static控件中
- 打开并显示位图 mfc view
- MFC如何显示位图