我创建了一个棕色的画刷,可是画出来的矩形却是用黑白相间的花纹填充的,代码如下:void CMyView::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect rcMap;
GetClientRect(rcMap);
CDC CCompatibleDC;
CBitmap CCompatibleBitmap;
CCompatibleDC.CreateCompatibleDC(&dc);
CCompatibleBitmap.CreateCompatibleBitmap(&CCompatibleDC,rcMap.Width(),rcMap.Height());
CCompatibleDC.SelectObject(CCompatibleBitmap);
CBrush brush;
brush.DeleteObject();
brush.CreateSolidBrush(RGB(200,150,100));
CBrush* oldBrush = NULL;
CCompatibleDC.FillSolidRect(rcMap.left,rcMap.top,rcMap.Width(),rcMap.Height(),RGB(255,255,255));
oldBrush = CCompatibleDC.SelectObject(&brush);
CCompatibleDC.Rectangle(rcMap.left,rcMap.top,70,70);
CCompatibleDC.SelectObject(oldBrush);
dc.BitBlt(rcMap.left,rcMap.top,rcMap.Width(),rcMap.Height(),&CCompatibleDC,rcMap.left,rcMap.top,SRCCOPY);
CCompatibleDC.DeleteDC();
CCompatibleBitmap.DeleteObject();
// Do not call CView::OnPaint() for painting messages
}
那位大侠帮我看看问题出在哪?

解决方案 »

  1.   

    CCompatibleBitmap.CreateCompatibleBitmap(CDC::FromHandle(dc.GetSafeHand()),rcMap.Width(),rcMap.Height());创建兼容位图时 中的CDC不要使用内存DC。
      

  2.   

        CBrush brush;
        brush.DeleteObject();
        brush.CreateSolidBrush(RGB(200,150,100));
      

  3.   

    MSDN中的解释。
    When a memory device context is created, GDI automatically selects a monochrome stock bitmap for it.