sev*_*axx 6 c++ windows mfc gdi device-context
也许这是一个愚蠢的问题,我不明白为什么我不能在以下代码中创建DC:
HBITMAP COcrDlg::LoadClippedBitmap(LPCTSTR pathName,UINT maxWidth,UINT maxHeight)
{
    HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, pathName, IMAGE_BITMAP, 0, 0,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);       
    if (!hBmp)
        return NULL;
    HDC hdc = (HDC)GetDC();
    HDC hdcMem = CreateCompatibleDC(hdc);
    if (!hdcMem)
    {
        DWORD err = GetLastError();
    }  
    ...
    ...
    ...
位图hBmp加载正常,hdc具有有效值.但是对CreateCompatibleDC()的调用返回一个NULL指针.然后,GetLastError()返回0!有谁能猜出这里发生了什么,拜托?
PS:在此之前没有调用内存分配或GDI例程...所以我认为应该排除内存泄漏.
你不正确地将结果投射GetDC()到了HDC.  GetDC()返回指向CDC对象的指针.
要做你想做的事,你可以做以下任何一种.第一个选择更适合MFC喜欢做的事情,但两者都很好用:
CDC *pDC = GetDC();
// Option 1
CDC memDC;
memDC.CreateCompatibleDC(pDC);
// Option 2
HDC hMemDC = CreateCompatibleDC((HDC)(*pDC));
重要的是要注意,选项2与您当前做错的事情不同.所述CDC类具有operator HDC()允许其被转换为HDC构件,但是这并不适用于指针.你必须先取消引用它.
| 归档时间: | 
 | 
| 查看次数: | 2295 次 | 
| 最近记录: |