學習MFC過程中從書中提煉出來的表格,方便使用。設備描述表屬性、GDI畫筆和CPen類、GDI畫刷和CBrush類、主要的GDI顏色、CDC文本函數、GDI文本對齊方式、常用設備對象。
設備描述表屬性
當使用CDC輸出函數在屏幕畫圖時,輸出的某些特性並沒有在函數調用過程中規定,但可以通過設備描述表自身獲得。如果想忽略背景顏色,可將背景模式設置爲“transparent”。
Attribute Default Set with Get with
文本顏色 Black CDC::SetTextColor CDC::GetTextColor
背景顏色 White CDC::SetBkColor CDC::GetBkColor
背景模式 OPAQUE CDC::SetBkMode CDC::GetBkMode
映射模式 MM_TEXT CDC::SetMapMode CDC::GetMapMode
繪圖模式 R2_COPYPEN CDC::SetROP2 CDC::GetROP2
當前位置 (0,0) CDC::MoveTo CDC::GetCurrentPosition
當前畫筆 BLACK_PEN CDC::SelectObject CDC::SelectObject
當前畫刷 WHITE_BRUSH CDC::SelectObject CDC::SelectObject
當前字體 SYSTEM_FONT CDC::SelectObject CDC::SelectObject
『 不同的CDC函數以不同方式使用設備描述表的屬性。例如,LineTo畫線時,當前畫筆決定線的顏色、寬度和樣式。用Rectangle函數畫矩形時,GDI用當前畫筆畫矩形邊界,並用當前畫筆填充矩形區域。所有文本輸出函數都採用當前字體。文本輸出時,文本顏色決定了字符顏色,而背景顏色決定字符後面的填充色。在使用LineTo函數畫虛線或點時,背景顏色還用於填充線段間空隙。
可用SelectObject選入設備描述表的6個對象:1、畫筆(Pen) 2、畫刷(Brush) 3、字體(Font) 4、位圖(Bitmap) 5、調色板(Palette) 6、區域(Region)。
每逢OnPaint被調用時都要將所需要的畫筆和畫刷選入設備描述表。如果不想反覆對它進行初始化設定,可以用CDC::SaveDC函數保存狀態,並在下次使用時用CDC::ResrotreDC將它回覆。另一種方法是,註冊一個自定義的WNDCLASS,其中包含CS_OWNDC樣式。』
GDI畫筆和CPen類
CPen *OldPen = dc.SelectObject(&pen);
如果要改變畫線方式,則需要創建一個GDI畫筆,並由SelectObject將它選入設備描述表。
畫筆樣式 描述
PS_SOLID 實線
PS_DASH 破折虛線
PS_DOT 點虛線
PS_DASHDOT 破折-點虛線
PS_DASHDOTDOT 破折-點-點虛線
PS_NULL 空畫筆
PS_INSIDEFRAME 框內實線*
『 創建畫筆最簡單的方法就是構造一個CPen對象並把參數都傳送給該對象:
CPen pen(int nPenStyle, int nWidth, COLORREF crColor);
創建GDI畫筆第二種方法就是調用CPen::CreatePen。還有一種方法時向LOGPEN結構中填充苗粟畫筆特性的參數,然後調用CPen::CreatePenIndirect生成畫筆。』
GDI畫刷和CBrush類
CBrush *OldBrush = dc.SelectObject(&brush);
畫刷有三種基本樣式:單色,帶陰影和帶圖案。當用陰影線畫刷時,Windows用默認背景色(白色)填充陰影線空白處,用CDC::SetBkColor改變背景色,或用CDC::SetBkMode把背景模式OPAQUE改爲TRANSPARENT禁止背景填充。
陰影樣式 樣式
HS_BDIAGONAL 向後對角線
HS_CROSS 十字網格
HS_DIAGCROSS 斜十字網格
HS_FDIAGONAL 向前對角線
HS_HORIZONTAL 水平線
HS_VERTICAL 豎直線
『 創建畫刷有兩種方式,使用構造函數或Create函數。
構造函數:CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
CBrush(Cbitmap *pBitmap)。
Create函數:CBrush::CreateSolidBrush(COLORREF crColor);
CBrush::CreateHatchBrush(int nIndex, COLORREF crColor);』
主要的GDI顏色
顏色 R G B 顏色 R G B
黑 0 0 0 淺灰 192 192 192
藍 0 0 192 亮藍 0 0 255
綠 0 192 0 亮綠 0 255 0
青 0 192 192 亮青 0 255 255
紅 192 0 0 亮紅 255 0 0
品紅 192 0 192 亮品紅 255 0 255
黃 192 192 0 亮黃 255 255 0
深灰 128 128 128 白 255 255 255
CDC文本函數
函數 說明
DrawText 在式化矩形中顯示文本
TextOut 在當前或指定位置輸出一行文本
TabbedTextOut 輸出一行含有製表符的文本
ExTextOut 輸出一行文本,並有選擇地給矩形填充背景顏色或改變字符間距
GetTextExtent 計算當前字體下一個字符串寬度
GetTabbedTextExtent 計算當前字體下含有製表符字符串地寬度
GetTextMetrics 返回當前字體度量(字符高度、字符平均寬度等)
SetTextAlign 給TextOut和其他輸出函數設定對齊參數
SetTextJustification 確定對齊一串文本時需要增加的寬度
SetTextColor 設定設備描述表的文本輸出顏色
SetBkColor 設定設備描述表的背景顏色,即確定輸出字符背後的填充色
GDI文本對齊方式
UINT CDC::SetTextAlign(UINT nFlags);
默認方式下,傳遞給TextOut等函數的座標值都確定了文本最左上角的位置。函數SetTextAlign指定了點和文本外矩形的對齊方式。設置TA_UPDATECP後,TextOut忽略參數座標而使用DC當前位置。
對齊方式 樣式
TA_CENTER 矩形水平方向中點對齊到點
TA_LEFT 矩形左邊界對齊到點(默認)
TA_RIGHT 矩形右邊界對齊到點
TA_BASELINE 字體基線對齊到點
TA_BOTTOM 矩形下邊界對齊到點
TA_TOP 矩形上邊界對齊到點(默認)
TA_NOUPDATECP 輸出文本後不更新當前位置(默認)
TA_UPDATECP 輸出文本後更新當前X位置至文本右邊界處
常用設備對象
Window預先定義了一些畫筆、畫刷等GDI對象。用CDC::SelectStockObject將這些備用對象選入設備描述表,或用CgdiObject::CreateStockObject將它們賦給已有的CPen、CBrush等對象。CgdiObject表示GDI對象的一個基本類。
設備對象 說明
NULL_PEN 不畫任何東西的畫筆
BLACK_PEN 畫一個象素寬實現的黑筆
WHITE_PEN 畫一個象素寬的白筆
NULL_BRUSH 不畫任何東西的畫刷
HOLLOW_BRUSH 不畫任何東西的畫刷(同NULL_BRUSH)
BLACK_BRUSH 黑色畫刷
DKGRAY_BRUSH 深灰色畫刷
GRAY_BRUSH 中性灰色畫刷
LTGRAY_BRUSH 淺灰色畫刷
WHITE_BRUSH 白色畫刷
ANSI_FIXED_FONT 固定間距的ANSI字體
ANSI_VAR_FONT 變間距的ANSI字體
SYSTEM_FONT 變間距系統字體
SYSTEM_FIXED_FONT 固定間距系統字體