HDC hmemdc   = ::CreateCompatibleDC(dc);
HBITMAP hbmp = ::CreateCompatibleBitmap(dc,....);
HBITMAP holdbmp =(HBITMAP)::SelectObject(hmemdc,hbmp);此時,我通過:
     ::BitBlt(hmemdc,....,dc,....,SRCCOPY); //將內容blt到hmemdc中
或者 我在hmemdc中進行畫圖操作......
     MoveTo(hmemdc,...); LineTo(hmemdc,...);最後執行清除工作
::SelectObject(hmemdc,holdbmp);
::DeleteObject(hmemdc);
執行上面所有代碼後:
1.此時hbmp是否還有位圖數據,為什麼?
2.SelectObject( )函數的作用是什麼: 即為什麼要選擇對象到設備環境?
SelectObject( )後,所有的操作是在hbmp上還是在hmemdc上進行?

解决方案 »

  1.   

    hbmp有位图数据。
       内存DC(CreateCompatibleDC)总是和一个位图(HBITMAP)关联,在内存DC上绘图都画在关联的位图上,因为关联的位图在内存中,所以叫内存DC。SelectObject(HBITMAP)的作用是设置内存DC当前关联的位图是hbmp,执行之后,所有绘图操作,都画在hbmp,直到SelectObject另外一个位图为止。   所有的绘图操作由hmemdc进行(驱动程序),而hbmp只是记录操作的结果,可以理解为dc把图画在当前关联的hbmp上。
      

  2.   

    1.hbmp上还有位图数据,因为你只是把hbmp创建出来了,但并没有删除它
    2.SelectObject()函数的作用是把一个DC属性,指定给特定的DC。DC实际上是一个虚概念,
    你可以简单理解成,一个人(DC)想画画,他就需要有张纸(Bitmap),有支笔(Pen),有画刷(Brush),写字要有字体(Font),然后就可以开始做图(LineTo(),TextOut());所有画出来的东西都在纸上。这张画可以被另一个人COPY过去,就用BitBlt函数来实现。
    3.SelectObject( )後,hbmp就已经不存在了,所有操作都与它无关了。
      

  3.   

    selectObject可以保存旧数据以便以后调用