日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

戏说 Windows GDI (2)

發布時間:2025/3/15 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 戏说 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內存嚴重缺乏時才會發生。 我們定義的畫筆一般具有三個特性:樣式、寬度和顏色。主要的畫筆樣式和畫筆顏色如下表所示: 常見的畫筆樣式
MarkStyleMarkStyle
PS_SOLID-------------PS_DOT· · · · · · · ·
PS_DASH- - - - - - -PS_DASHDOT-·-·-·-·-·-·-·-·
常見的GDI顏色
ColorRGBColorRGBColorRGBColorRGB
0,0,00,0,1920,192,00,192,192
192,0,0品紅192,0,192192,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,0255,255,255
下面研究一下怎么使用已經設置好的畫筆呢? 很簡單,我們需要把已經設置好的畫筆選入到設備描述表中。示例代碼是創建一個單位為10單位寬的紅色筆,并用它畫了一個橢圓: CPen pen(PS_SOLID, 10, RGB(255,0,0)); CPen* pOldPen = dc.SelectObject( &pen );//將當前的畫筆選入的設備描述表中 dc.Ellipse(0,0,100,100);

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類包含的文本操作函數如下: 設備描述表中的文本操作函數
FunctionExplanation
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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。