CDC *pDC = CDC::FromHandle(hDC);  
int m = GetLastError();
HDC memDC = CreateCompatibleDC(hDC);  
int n = GetLastError();CreateCompatibleDC(hDC) 返回NULL

解决方案 »

  1.   

    CreateCompatibleDC(hDC)返回NULL,说明hDC无效
    那你之前的 CDC *pDC = CDC::FromHandle(hDC);  成功了么?int m = GetLastError();也应该无效吧。
    要不你先把前两句注释了再看看int n = GetLastError();的值。
    =====================================================================================
    MSDN上说Some functions call SetLastError under conditions of success。
    是不是有函数SetLastError()了 
      

  2.   

    第一行没有用 hdc是函数外传进来的  hdc是有值的
      

  3.   

     int n = GetLastError();你上面都没判断是否为NULL就直接调这个getlasterror了啊,那成功怎么说,成功的话本身就是返回0啊
      

  4.   

    Create了要记得Delete,系统有最大的资源限制,你看看是不是别的地方存在大量的HDC,HBITMAP,之类的东东Create出来了没有Delete,因为资源达到最大限制而造成的失败是抓不到Error的
      

  5.   

    GetLastError用法不对,正确示例如下:
    HDC memDC;
    int n;
    if(memDC=CreateCompatibleDC(hDC) != NULL)
    {
    //do something!
    }
    else
    {
    n = GetLastError();
    }
      

  6.   

    GDI资源泄露吧,记得使用完成以后及时释放
      

  7.   

    GetDeviceCaps(hDC, TECHNOLOGY),看返回值是否为DT_RASDISPLAY或者其他Raster类型的。
    The CreateCompatibleDC function can only be used with devices that support raster operations.