atl创建activex问题,我创建有界面的activex,在界面上贴的位图,在ondraw函数中用下面的方法成功,但是在测试时发现hmemDC的值为0
HBITMAP bitmap = LoadBitmap( _Module.GetResourceInstance(), MAKEINTRESOURCE( Xbmp ) );
HDC hdc = m_AtlDraw->hdcDraw;  HDC hMemDC = ::CreateCompatibleDC(hdc);
int i = GetLastError(); SelectObject(hMemDC,bitmap);
::BitBlt( hdc, 
Xpos, Ypos,Xwidth,Xheigth, 
hMemDC, 0, 0, SRCCOPY );
::DeleteObject( bitmap );
::DeleteDC( hMemDC );

解决方案 »

  1.   

    m_AtlDraw是什么?m_AtlDraw->hdcDraw是有效的吗?
      

  2.   

    判断下每个函数的返回值。HDC hdc = m_AtlDraw->hdcDraw;
    HBITMAP bitmap = LoadBitmap( _Module.GetResourceInstance(), MAKEINTRESOURCE( Xbmp ) );
    if (bitmap)
    {
    HDC hMemDC = ::CreateCompatibleDC(hdc); if (hMemDC)
    { HGDIOBJ hdcOld = (HGDIOBJ)SelectObject(hMemDC,bitmap);
    ::BitBlt( hdc, Xpos, Ypos, Xwidth, Xheigth, hMemDC, 0, 0, SRCCOPY ); ::SelectObject(hMemDC, hdcOld); ::DeleteDC( hMemDC ); 
    }
    else
    ATLTRACE("Failed to CreateCompatibleDC");
    ::DeleteObject( bitmap );
    }
    else
    {
    ATLTRACE("Failed to LoadBitmap");
    }