1. 程式人生 > >windows程式設計_第5章_繪圖基礎——學習筆記

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