?? 04.2.6 繪制彩色線條.txt
字號:
4.2.6 繪制彩色線條
上述各種方法實現的畫線功能,繪制的都是黑色線條。這是因為設備描述表中有一個默認的黑色畫筆,因此繪制的線條都是黑色的。如果想要繪制其他顏色的線條,首先需要創建一個特定顏色的畫筆,然后將此畫筆選入設備描述表中,接下來繪制的線條的顏色就由這個新畫筆的顏色決定了。
可以利用MFC提供的類CPen來創建畫筆對象。該類封裝了與畫筆相關的操作。它有三個構造函數,其中一個構造函數的原型聲明如下所示。
CPen( int nPenStyle, int nWidth, COLORREF crColor );
其中,第一個參數 (nPenStyle)指定筆的線型 (實線、點線、虛線等);第二個參數 CnWid由)指定筆的線寬:第三個參數 CcrColor)指定筆的顏色,這個參數是COLORREF類型,利用RGB這個宏可以構建這種類型的值。 RGB宏的聲明如下所示。
COLORREF RGB( BYTE bRed , BYTE bGreen, BYTE bBlue color);
可以看到, RGB宏有三個參數,分別代表紅、綠、藍三種顏色的值。這三個參數都是 BYTE類型,取值范圍為0-255。如果將RGB宏的三個分量全部設置為0,則得到黑色:如果全部設置為255,則得到白色:……可以將這三個分量設置成0-255之間的任意值,從而得到各種不同的顏色。
詳
陽
另外,在程序中,當構造一個 GDI對象后,該對象并不會立即生效,必須選入設備描述表,它才會在以后的繪制操作中生效。利用 SelectObject函數可以實現把 GDI對象選入設備描述表中,并且該函數會返回指向先前被選對象的指針。這主要是為了在完成當前繪制操作后,還原設備描述表用的。例如,當我們在某個局部范圍內繪圖時,可能需要改變畫筆的顏色,并把新畫筆選入設備描述表。當這部分繪圖操作完成之后,需要恢復到原來的畫筆顏色,然后完成其他部分的繪圖操作。一般情況下,在完成繪圖操作之后,都要利用 SelectObject函數把先前的 GDI對象選入設備描述表,以便使其恢復到先前的狀態。
如例 4-14所示是在 Draw程序中繪制彩色線條的程序代碼。
例 4-14
voi d CDrawView : :OnLButtonUp(UINT nFlags , CPoin t point)
CPen pen(PS_SOLID , 1 , RGB(255 , O, O)) ;
CCli entDC dc(th工 s) ;
CPen* pOldPen = dc . SelectObject(&pe口) ;
dC .M oveTo( m-p tOrig工 n) ;
dc .Li neTo(point) ;
dc . SelectObject(pOldPen) ;
CView: :OnLButtonUp(nFlags , point) ;
上述例 4-14所示代碼中,首先創建一個實線畫筆,其寬度為1,顏色為紅色。接著利用 SelectObject函數將新畫筆對象選入設備描述表。再利用畫線函數繪制線條。最后,再次調用 SelectObject函數恢復設備描述表中的畫筆對象。
Build井運行 Draw程序,井拖動鼠標畫線,這時可以看到這次繪制的是紅色的線條。讀者可以試著修改畫筆的顏色,將會繪制出其他各種顏色的線條。也可以改變畫筆的寬度,例如改為 10,此時程序運行結果如圖 4.15所示。
圖 4.15寬度為 10的畫筆繪制結果
也可以改變畫筆的線型,例如選擇虛線線型,即用下面這行代碼替換例 4-14所示代碼中構造畫筆對象的那行代碼。
CPen pen(PS_DASH , 10 , RGB(255 , O, O));
. Build井運行 Draw程序,并拖動鼠標左鍵進行畫線操作,將會發現繪制的還是一條實線,并不是想像中的虛線。這是因為畫筆的寬度要小于等于 1時,虛線線型才有效。因此,
第4
讀者可以修改構造畫筆對象的代碼,將其寬度設置為1,再次Build并運行Draw程序,井拖動鼠標左鍵繪制線條,這時可以看到繪制的是虛線,如圖4.16所示。另外,我們還可以繪制點線 (將畫筆的線型改為 PS DOT),程序運行結果如圖 4.17所示。
圖 4.16繪制虛線條圖 4.17繪制點線
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -