当前位置: 代码迷 >> WinCE >> winCE下双缓存加载位图后再画图,位图OK,画图失败?解决办法
  详细解决方案

winCE下双缓存加载位图后再画图,位图OK,画图失败?解决办法

热度:394   发布时间:2016-04-28 13:53:39.0
winCE下双缓存加载位图后再画图,位图OK,画图失败?
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);
  相关解决方案