戏说 Windows GDI (2)
生活随笔
收集整理的這篇文章主要介紹了
戏说 Windows GDI (2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. GDI畫筆和CPen類
Windows用當前選入設備描述表的畫筆繪制直線和曲線,并給用Rectangle、Ellipse以及其他圖像生成函數畫出的圖形鑲嵌邊框。在系統默認的情況下,畫筆是指一個像素點寬的黑色實線。如果要改變畫線方式,則需要創建一個GDI畫筆,并由CDC::SelectObject將他選入設備描述表。 MFC用類CPen表示GDI畫筆。創建畫筆的最簡單的方法是構建一個CPen對象并把定義畫筆所用的參數都傳給該對象。 CPen pen(PS_SOLID, 1 ,RGB(255,0,0) ); 此外,我們還可以換一種方法構建一個沒有初始化的CPen對象,并調用相關函數進行初始化: CPen pen; pen.CreatePen(PS_SOLID, 1, RGB(255,0,0));如果畫筆創建成功,則CreatePen和CreatePenIndirect返回TRUE,反之,則返回FALSE。如果CPen創建畫筆失敗,就會有CResourseException型異常事件發生。這種情況只有在Windows內存嚴重缺乏時才會發生。 我們定義的畫筆一般具有三個特性:樣式、寬度和顏色。主要的畫筆樣式和畫筆顏色如下表所示:| Mark | Style | Mark | Style |
| PS_SOLID | ------------- | PS_DOT | · · · · · · · · |
| PS_DASH | - - - - - - - | PS_DASHDOT | -·-·-·-·-·-·-·-· |
| Color | RGB | Color | RGB | Color | RGB | Color | RGB |
| 黑 | 0,0,0 | 藍 | 0,0,192 | 綠 | 0,192,0 | 青 | 0,192,192 |
| 紅 | 192,0,0 | 品紅 | 192,0,192 | 黃 | 192,192,0 | 深灰 | 128,128,128 |
| 淺灰 | 192,192,192 | 亮藍 | 0,0,255 | 亮綠 | 0,255,0 | 亮青 | 0,255,255 |
| 亮紅 | 255,0,0 | 亮品紅 | 255,0,255 | 亮黃 | 255,255,0 | 白 | 255,255,255 |
2. GDI畫刷和CBrush類
在默認情況下,由Rectangle、Ellipse以及其他CDC輸出函數畫出的封閉圖形填充著白色像素點,通過創建GDI畫刷并在畫圖之前將他選入到設備描述表中便可以改變圖形的填充顏色。 MFC的CBrush類提供了三種基本的畫刷:單色、帶陰影、帶圖案。陰影線畫刷采用預先定義好的交叉線圖案填充圖形;圖案畫刷用位圖來填充圖形。CBrush類為每種畫刷模式提供了一個構造函數。 創建一個單紅色畫刷的代碼: CBrush brush(RGB(255,0,0)); // CBrush brush; // brush.CreateSolidBrush(RGB(255,0,0));創建紅色陰影線畫刷代碼: CBrush brush(HS_DIAGCROSS,RGB(255,0,0)); // CBrush brush; // brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0)); // 紅色陰影線-白色填充背景CBrush brush(HS_DIAGCROSS,RGB(255,255,255)); dc.SelectObject(&brush); dc.SetBkColor(RGB(192,192,192)); dc.Rectangle(0,0,100,100); //100*100單位矩形,白色陰影線-灰色的背景填充
CBrush brush(HS_DIAGCROSS,RGB(0,0,0)); dc.SelectObject(&brush); dc.SetBkMode(TRANSPARENT); dc.Rectangle(0,0,100,100); //交叉線的背景為當前背景,陰影線為黑色
幾種我們最常用的陰影填充圖案如下:
3.畫文本
CDC類包含的文本操作函數如下:| Function | Explanation |
| DrawText | 在格式化矩形中顯示文本 |
| TextOut | 在當前或指定位置輸出一行文本 |
| TableTextOut | 輸出一行含有制表符的文本 |
| ExtTextOut | 輸出一行文本,并有選擇地給矩形填充背景或改變字符間距 |
| GetTextExtent | 計算當前字體下一個字符串的長度 |
| GetTextMatries | 返回當前字符的高度、字符平均寬度等 |
| SetTextAlign | 給TextOut和其他輸出函數設定對齊參數 |
| SetTextColor | 設定設備描述表中文本輸出的顏色 |
| SetBkColor | 設定設備描述表的背景色,即確定輸出字符背后的填充色 |
4. GDI字體和CFont類
與畫筆和畫刷一樣,字體也是一個GDI對象,在MFC中,字體由CFont類的對象表示。構造了CFont對象之后,就可以通過調用CFont對象的CreateFont、CreateFontIndirect、CreatePointFontIndirect函數穿件帶下劃線的GDI字體了。 例如創建2點屏幕字體代碼: CFont font; font.CreatePointFont(120,_T("Times New Roman"))需要注意的是,傳遞給CreatePointFont的數值是我們所期望點的大小的10倍。 創建字體之后,我們把它選入到設備描述表中就可以執行我們希望進行的操作。下面的例子是在OnPaint處理程序中畫“Hello,MFC”,采用72-點“Arial”字樣,并帶有陰影: void CMainWindow::OnPaint(){ CRect rect; GetClientRect(&rect);CFont font; font.CreatePointFont(720,_T("Arial"));CPaintDC dc(this); dc.SelectObject( &font ); dc.SetBkMode( TRANSPARENT );CString string = _T("Hello MFC!");rect.OffsetRect(16,16); dc.SetTextColor(RGB(192,192,192)); dc.DrawText(string, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);}總結
以上是生活随笔為你收集整理的戏说 Windows GDI (2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【飞秋】微软简化Visual Studi
- 下一篇: 局域网聊天老大——飞鸽传书