DC/畫線/獲得窗口指針/畫刷/位圖

第一部分——畫線

第一種方法:

HDC聲明一個句柄。

GetDC(m_hWnd)返回一個指向m_hWnd句柄的窗口的設備描述表。

MoveToEx和LineTo是兩個GDI(圖形調和接口——基於類的API)函數。

GetDC()必須和ReleaseDC一起使用,因爲Windows中,設備資源是共享的,一個應用程序使用設備後必須釋放它。

第二種方法:

CDC(DC類)聲明一個DC對象 CDC*聲明一個指向DC對象的指針(例如pDC)。

*pDC有兩個方法 MoveTo和LineTo。

使用後要ReleaseDC()函數的形參是指針類型的,這就是爲什麼一開始CDC不聲明對象而是對象指針的原因。

第三種方法:(比較方便)

CClientDC類,這個類的構造函數(形參是指向窗口的指針)獲取DC,析構釋放。

同樣有MoveTo和LineTo這兩個方法

後面的部分講在客戶區以外的區域中畫線

PS:這部分介紹了怎麼得到父類窗口的指針,用GetParent()函數得到返回值;

用CClientDC dc(GetParent())得到的DC是客戶區

第四種方法:

CClientDC改成CWindowDC()可以得到窗口的DC;

CWindow dc(GetParent())得到主窗口包括標題欄的DC。

注意:工具欄是客戶區

第二部分——修改畫筆樣式

要修改設備描述表中的畫筆樣式,必須1、新建一個畫筆。2、修改它的樣式。3、將它選進DC。

這裏要用到SelectObject這個函數;

第三部分——使用畫刷

畫刷用來填充一個區域,在畫一個矩形的時候,新建的畫刷不需要被選進DC,因爲fillrect函數的第二個參數就是一個指向畫刷的指針。

第四部分——位圖畫刷

這裏要注意,位圖不能直接填充,而是要把位圖加載到畫刷中去

用CBitmap類聲明一個位圖對象,這個對象用LoadBitmap(IDB_BITMAP)將它本身和IDB_BITMAP聯繫起來。

CBrush類的對象有一個構造函數可以以CBitmap*做參數。

透明畫刷

這裏用到CDC類的Rectangle函數,上面的Rect方法填充一個區域,這個Rectangle是一個矩形邊框(默認填充白色畫刷)。但是我們想畫一個內部透明的邊框,我們可以把透明畫刷選進去。

1、用CDC的SelectObject,它的參數是一個對象指針;

2、GetStockObject這個方法,當參數是NULL_BRUSH時可以生成一個空畫刷的句柄,類型是HGDIOBJ。

3、FromHandle是一個專門用來把句柄轉換爲pObject的函數,很多類都有這個方法。比如CBrush類的FromHandle可以把一個HBRUSH轉換爲pBrush;

用3,可以把1和2結合起來用  就實現

CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

SetROP2函數用來設置繪圖模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章