windows程式設計_第5章_繪圖基礎——學習筆記
一、概要
GDI 是WINDOWS極其重要的一部分,從程式設計師的角度來說,GDI由幾百個函式以及相關的一些資料型別、巨集和結構組成。GDI的一個主要目的是支援與裝置無關的圖形。
二、GDI的結構
1、GDI的函式分類
1) 獲取(或建立)和釋放(或銷燬)裝置環境的函式:BeginPaint\EndPaint\GetDc\ReleaseDc……
2) 獲取裝置環境資訊的函式:GetTextMetrics……
3) 繪製函式:TextOut……
4) 設定和獲取設定環境屬性的函式:SetTextColor\SetTextAlign……
5) 使用GDI物件的函式:CreatPen\CreatePenIndirect\ExtCreatePen…….
2、GDI的基本圖形
1) 線條和曲線
2) 可被填充的封閉區域
3) 點陣圖
4) 文字
三、裝置環境
希望在圖形輸出裝置上繪製圖形,必須首先獲得裝置環境的控制代碼,當windows把這個控制代碼交給你的程式,windows也就給予你使用這個控制代碼的許可權。
1、獲取裝置環境控制代碼
1)hdc = BeginPaint(hwnd, &ps);
……
EndPaint(hwnd, &ps);
2) hdc = GetDC(hwnd);
……
ReleaseDC(hwnd, hdc);
3)hdc = GetWindowDC(hwnd);
……
ReleaseDC(hwnd, hdc);
4)hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);
……
DeleteDC(hdc);
2、獲取裝置環境的資訊
函式:GetDevicecaps(hdc, iIndex);
3、裝置尺寸
畫素尺寸(畫素規模):裝置在水平或垂直方向上顯示的總的畫素數。
度量尺寸(度量規模):以英寸或者毫米為單位的裝置的客戶區域的大小。
解析度= 畫素尺寸 /度量尺寸,即每度量單位中含有的畫素
正方形畫素:裝置的水平解析度等於垂直解析度。
函式:GetSystemMetrics函式,GetDeviceCaps函式
4、色彩ABC
真彩:每個畫素24位,8位紅,8位綠,8位藍
高彩:每畫素16位,5位紅,6位綠,5位藍
COLORREF:32位無符號長整型,表示一種特定的顏色。
GetRValue\ GetGValue\ GetBValue從COLORREF值中提取RGB的原色值。
5、儲存裝置環境
函式:SaveDC
四、點和線的繪製
1、設定畫素
SetPixel(hdc, x, y, crcolor):將座標為x,y的畫素點設定為某個特定的顏色。
GetPixel(hdc, x, y):返回指定座標位置的畫素的顏色。
2、畫圖形
函式 |
功能 |
LineTo |
畫直線 |
PolyLine\PolylineTo |
畫一條由多條首尾相連的直線構成的折線 |
PolyPolyline |
畫多條折線 |
Arc |
畫橢圓弧線 |
PolyBezier\PolyBezierTo |
畫貝塞爾樣條曲線 |
Rectangle |
畫矩形 |
Ellipse |
畫橢圓 |
RoundRect |
畫圓角矩形 |
Pie |
畫橢圓的一部分,使其看起來像一個扇形 |
Chord |
畫出由弦割出的部分橢圓,形狀呈弓形 |
3、GDI物件
一個程式可以建立6種GDI物件:畫筆、畫刷、點陣圖、區域、字型、調色盤
使用GDI物件的三條規則:
1) 最終應刪除你所建立的所有GDI物件
2) 當GDI物件被選入一個有效的裝置環境時,不要刪除它
3) 不要刪除備用物件
4、畫筆
1)使用現有畫筆
Hpen =GetStockObject(WHITE_PEN) :獲取畫筆的控制代碼
SelectObject(hdc,hPen) :將畫筆選入裝置環境
2)建立畫筆
CreatePen\CreatePenIndirect
3)選擇畫筆
SelectObject
4)刪除畫筆
DeleteObject
5、填充空隙
1、Polygon函式和多邊形填充模式
2、用畫刷填充內部
6、GDI對映模式
1)與對映模式相關的裝置環境屬性:視窗原點、視口原點、視窗範圍、視口範圍
2)裝置座標、邏輯座標
3)裝置座標系統:螢幕座標、全視窗座標、客戶區座標
五、矩形、區域、剪裁
1、處理矩形
函式 |
功能 |
FillRect |
使用指定畫刷填充矩形 |
FrameRect |
使用畫刷繪製矩形,但不填充 |
InvertRect |
翻轉矩形內的所有畫素 |
2、GetMessage和PeekMassage
3、建立和繪製區域
函式 |
功能 |
CreateRectRgn |
繪製矩形區域 |
CreateRectRgnIndirect |
|
CreateEllipticRgn |
繪製橢圓區域 |
CreateEllipticRgnIndirect |
4、矩形與區域的剪裁
函式 |
功能 |
InvalidateRgn |
使區域無效 |
ValidateRgn |
使區域有效 |
SelectObject |
將一個區域選入裝置環境來建立自己的剪裁區域 |
SelectClipRgn |