void CFantasyGameView::DrawInfor(CDC* pDC)
{
CRect rect;
GetClientRect(&rect); CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(102,89,95));
MemDC.SetBkMode(TRANSPARENT);

CClientDC dc(this);
if(dc.CreateCompatibleDC(pDC)==FALSE)
        {}
        //……
这里的dc在Debug下是创建不成功的,在release下是可以的。CClientDC 是用在客户去的吧

解决方案 »

  1.   

    看看MSDN,CClientDC的构造函数
    "Constructs a CClientDC object that accesses the client area of the CWnd pointed to by pWnd. The constructor calls the Windows functionGetDC. "
    就是说在CClientDC dc(this);执行后,DC已经被创建,怎么还需要调用dc.CreateCompatibleDC(pDC)呢?只有在直接构造才需要调用CreateCompatibleDC,比如CDC dc;
    你可以打印出dc.m_hDC来看看什么时候DC被赋值了
      

  2.   

    CClientDC dc(this);这样初始化dc已经创建DC了,绑定了当前窗体的视图DC了
    所以CreateCompatibleDC失败了。
      

  3.   

    CClientDC dc(this);
    调试的时候是这里没有成功,
    BOOL CDC::Attach(HDC hDC)
    {
    ASSERT(m_hDC == NULL);  //这里
      

  4.   

    CClientDC dc(this);如果把这句话放在OnDraw()函数中则不会报错
      

  5.   

    ASSERT(m_hDC == NULL);  //这里
    表示这是第2次 attach 了