winCE下双缓存加载位图后再画图,位图OK,画图失败?
void CAbsorberView::OnDraw(CDC* pDC)
{
CAbsorberDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bitmap_desk); // 加载的位图 成功
memDC.MoveTo(100,100); //画根直线试试 不成功
memDC.LineTo(500,500);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
}
------解决方案--------------------
你先直接画,不要用缓冲,看看能否画出来?
------解决方案--------------------
好不容易解决了。。。
用位图作为背景并且可以在上面画图的思路是这样的:要作到不闪烁就是用内存缓冲的方法,
而用位图作为背景就要将位图的影像“映射”到View的Brush中。代码如下:
- C/C++ code
CClientDC pDC(this); m_dc.CreateCompatibleDC(&pDC); CBitmap backBitmap; backBitmap.LoadBitmap(IDB_BITMAP1); //载入位图 BITMAP bmp; //计算位图尺寸 backBitmap.GetBitmap(&bmp); int bmpWidth= bmp.bmWidth; int bmpHeight= bmp.bmHeight; CBitmap memBitmap; //创建用于画图的Bitmap memBitmap.CreateCompatibleBitmap(&pDC,bmpWidth, bmpHeight); CBitmap* pOldBitmap= m_dc.SelectObject(&memBitmap); CRect rect(0,0,bmpWidth, bmpHeight); //改写Brush CBrush bkBrush; bkBrush.CreatePatternBrush(&backBitmap); CBrush* pOldBrush=m_dc.SelectObject(&bkBrush); m_dc.FillRect(rect, &bkBrush); CPen pen(PS_SOLID, 3,RGB(10,100,10)); m_dc.SelectObject(&pen); m_dc.MoveTo(10,10); m_dc.LineTo(200,200); m_dc.SetTextColor(0x1874CD); CString s="100"; m_dc.ExtTextOut ( 150, 150, ETO_OPAQUE, NULL, s, 8, NULL ); pDC.BitBlt(0,0,CLIENT_SCREEN_X,CLIENT_SCREEN_Y,&m_dc,0,0,SRCCOPY);