看了很多资料了,还是不明白有hBitmap了为什么还需要hDc?

解决方案 »

  1.   

    你的情况好像没说清楚,hbitmap,hdc,都是句柄,是完全独立的
    bitmap 是CBitmap类的,Windows 里显示/画东西就要与device context建立关系。
    而bitmap本身与device content是设备无关的,当你既涉及到bitmap又涉及到device content时
    当然要用到hbitmap,hdc啦,
      

  2.   

    打个不太准确的比方,HDC就是显示器,当然也可以打印机
      

  3.   

    "Windows 里显示/画东西就要与device context建立关系"
    不是DDB转DIB吗,还需要显示/画什么东西吗?我看过几个例子,有
    HDC hmemDC = CreateCompatibleDC(hScreenDC);
    hOldBM = (HBITMAP)SelectObject(hmemDC, hBitmap);
    hBitmap = (HBITMAP)SelectObject(hmemDC, hOldBM);
    GetDIBits(hmemDC, hBitmap, 0, bmInfo.bmiHeader.biHeight,
    lpvpxldata, &bmInfo, DIB_RGB_COLORS);
    亦有
    hDC = GetDC(NULL);
    GetDIBits(hmemDC, hBitmap, 0, bmInfo.bmiHeader.biHeight,
    lpvpxldata, &bmInfo, DIB_RGB_COLORS);同样的转换函数
    LONG GetBitmapBits(
      HBITMAP hbmp,      // handle to bitmap
      LONG cbBuffer,     // number of bytes to copy
      LPVOID lpvBits     // pointer to buffer to receive bits
    );
    就不需要设备描述表。
    问题1:是不是可以随便设置一个DC就可以,这个DC的设置对转换起到什么作用?MSDN 还有如下注解
    hDC 
    The device context (DC) responsible for the translation operation. hDC must be compatible with the hBitmap parameter. 
    hDc负责转换操作,hDc必须和hBitmap兼容。
    问题2:不解,为什么转换还要hDc负责?
      

  4.   

    这个API操作是设备相关的位图,位图和设备相关,而HDC也就是指显示设备的DC了,所以要用HDC,如果是操作设备无关的位图就不用了.不过好像没有直接操作设备无关位图的API
      

  5.   

    他们的关系如同是电视机和电视频道
    我的理解是hDC是电视机,可以放很多种电视
    而hBitmap和很多其他的图像类型都是电视频道
    你看电视,得把频道接入电视机,所以就需要你使用hDC把各个频道都转过来了
      

  6.   

    呵呵,peterlee1983做的比喻很形象。
    hDC是电视机,
    hBitmap电视频道,
    那DIB应该就是录影带了,我想把DDB转DIB提供转换器就行了,为什么还要提供电视机?我的意思是hDc在转换中起什么作用?
      

  7.   

    我在http://www.aogosoft.com/bbs/得到答案了,还是要谢谢回答我问题的。