第一部分——畫線
第一種方法:
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函數用來設置繪圖模式。