HBITMAP, HDC, SelectObject, DeleteObject之間的關係為何? |
尚未結案
|
celesta
一般會員 發表:1 回覆:1 積分:0 註冊:2004-12-01 發送簡訊給我 |
小弟有三個問題,是關於HBITMAP, HDC, SelectObject(), DeleteObject()之間的關係 Q1. 在HDC上進行繪圖會影響到其選入的HBITMAP?
自己試了一下,hdc是視窗DC handle HBITMAP sprite = (HBITMAP)LoadImage( ... ); //DDB
HDC hMemDC = CreateCompatibleDC( hdc );
SelectObject( hMemDC, sprite ); //接著在hMemDC上亂畫一通...
Ellipse( hMemDC... );
Rectangle( hMemDC... ); //刪除hMemDC, 另宣告hMemDC2並選入原來的sprite
DeleteDC( hMemDC );
HDC hMemDC2 = CreateCompatibleDC( hdc );
SelectObject( hMemDC2, sprite ); Bitblt( hdc, ..... hMemDC ); 顯示出來的是亂畫過後的sprite, 所以說HDC和其選入的HBITMAP "有一定關聯"?? 那兩者的關係是什麼?? 所以又做了以下實驗... Q2. HBITMAP可否在選入DC後就刪除?? HBITMAP sprite = (HBITMAP)LoadImage( ... ); //DDB
HDC hMemDC = CreateCompatibleDC( hdc );
SelectObject( hMemDC, sprite );
DeleteObject( sprite ); //選入後就刪除
Bitblt( hdc, ..... hMemDC ); //可以正常顯示sprite 如果說HDC和其選入的HBITMAP有關聯, 那為什麼還是可以正確顯示sprite圖樣?? 我已經刪除啦!! Q3. 再來就是說,HBITMAP似乎只能被選入一個DC?? HBITMAP sprite = (HBITMAP)LoadImage( ... ); //DDB
HDC hMemDC1 = CreateCompatibleDC( hdc );
HDC hMemDC2 = CreateCompatibleDC( hdc );
SelectObject( hMemDC1, sprite );
SelectObject( hMemDC2, sprite );
Bitblt( hdc, ..... hMemDC1 ); //可以顯示sprite
Bitblt( hdc, ..... hMemDC2 ); //無法顯示!! 除非在SelectObject( hMemDC2, sprite );之前刪除hMemDC1, 否則SelectObject( hMemDC2, sprite );起不了作用?? 煩請各位高手幫忙解答, 謝謝!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |