BOOL ShowFonts(int iWidth,int iHeight,HDC hdc,BYTE* pByte,POINT pt,int iMulty)
{
HBITMAP hBitmap;
BOOL BitBltSuccess;
HDC hdcMem;
DWORD dwError;
HDC   hDC=NULL;
int   iD;
//根据pByte  创建ddb
hBitmap=CreateBitmap(iWidth,iHeight,1,1,pByte);
dwError=GetLastError();
  {
一、   int crColor =SetPixel(hdc,1,1,RGB(255,0,0));
  int dwError=GetLastError();
  dwError=dwError;
  }
  //创建位图兼容设备句柄,并把位图选入
  iD=SaveDC(hDC);
hdcMem=CreateCompatibleDC(hdc);
  {
二、   int crColor =SetPixel(hdc,1,1,RGB(255,0,0));
  int dwError=GetLastError();
  dwError=dwError;
  }
  SelectObject(hdcMem,hBitmap);   //显示字体位图
BitBltSuccess=StretchBlt(hdc,pt.x,pt.y,iMulty*iWidth,iMulty*iHeight,hdcMem,0,0,iWidth,iHeight,NOTSRCCOPY);
DeleteDC(hdcMem);
RestoreDC(hDC,iD);
  {
  int crColor =SetPixel(hdc,1,1,RGB(255,0,0));
  int dwError=GetLastError();
  dwError=dwError;
  }
  // 
return BitBltSuccess;
}

解决方案 »

  1.   

    上面的代码中在一处SetPixel或GetPixel返回的值是正确的但是到是二处返回的就为-1,显然是不正确的,初步确定是使用了一个CreateCompatibleDC引起,但是不知道怎么解决,请大家帮忙!谢谢1
      

  2.   

    SaveDC(hDC);做了什么?
    将:
    iD=SaveDC(hDC);
    hdcMem=CreateCompatibleDC(hdc);
    放在后面还有问题吗?
      

  3.   

    在第一处调用SetPixel(hdc,1,1,RGB(255,0,0))把(1,1)的pixel设置成RGB(255,0,0),所以第二次调用返回的就是0x0000ff,也就是-1,这个没有问题啊。
      

  4.   

    不好意思,上面说错了。返回-1是调用函数失败的原因,具体什么错误,应该可以从error code看出来。
      

  5.   

    你在一和二处的代码目的是不是为了判断函数调用是否成功?其实大可不必这样。
    二处的代码在创建了内存兼容DC之后调用,此时内存兼容DC中默认的位图是1x1的单色位图,可能这是造成错误的原因。要判断CreateCompatibleDC()是否成功,直接判断返回的hdcMem是否为NULL就可以了。
    BOOL ShowFonts(int iWidth,int iHeight,HDC hdc,BYTE* pByte,POINT pt,int iMulty)
    {
    HBITMAP hBitmap;
    BOOL BitBltSuccess;
    HDC hdcMem;
    DWORD dwError;
    HDC   hDC=NULL;
    int   iD;
    //根据pByte  创建ddb
    hBitmap=CreateBitmap(iWidth,iHeight,1,1,pByte);
    if (!hBitmap)
    {
    dwError=GetLastError();
    return FALSE;
    }
      //创建位图兼容设备句柄,并把位图选入
      //iD=SaveDC(hDC);//这个函数调用是干什么的知道吗?放在这里毫无用处。
    hdcMem=CreateCompatibleDC(hdc);
    if (!hdcMem)
    {
    DeleteObject(hBitmap);
    dwError = GetLastError();
    return FALSE;
    }
    HBITMAP hOldBmp = (HBITMAP)SelectObject(hdcMem,hBitmap); //要保存原来的位图。 //显示字体位图
    BitBltSuccess=StretchBlt(hdc,pt.x,pt.y,iMulty*iWidth,iMulty*iHeight,hdcMem,0,0,iWidth,iHeight,NOTSRCCOPY);
    SelectObject(hdcMem, hOldBmp); //要恢复原来的位图
    DeleteDC(hdcMem);
    DeleteObject(hBitmap); //位图资源也要释放。
    //RestoreDC(hDC,iD);
    //   {
    //   int crColor =SetPixel(hdc,1,1,RGB(255,0,0));
    //   int dwError=GetLastError();
    //   dwError=dwError;
    //   }
      // 
    return BitBltSuccess;
    }
      

  6.   

    return BitBltSuccess;
    -->
    return TRUE;
      

  7.   

    我的目的不是判断CreateCompatibleDC是否成功,而且这个时候CreateCompatibleDC的返回值是成功的,目的是想知道为什么这里SetPixel和GetPixel受到CreateCompatibleDC的影响,返回值不成功,用getlasterror没有找到错误!