DJYGUI系列文章八:GDD繪圖系統

djyos類腦操作系統 發佈 2022-12-01T22:01:15.247226+00:00

DC中記錄著一些繪製參數,如各類顏色值,當前使用字體等等,用戶通過設置這些參數,來改變繪圖行為和效果。

1 GDD繪圖系統概述

1.1繪圖上下文

用戶所有的繪圖操作,都需要在一個繪圖上下文上進行(以下簡稱DC)。DC中記錄著一些繪製參數,如各類顏色值,當前使用字體等等,用戶通過設置這些參數,來改變繪圖行為和效果。多個繪圖上下文可同時使用,通過信號量保證了線程使用繪圖上下文的安全性。

1.2 DrawColor,FillColor,TextColor的作用與區別

繪圖上下文中,使用了三種顏色參數,分別如下:

DrawColor: 繪製色(畫筆),用於繪製線條,空心圖形,如DrawLine,DrawCircle;

FillColor: 填充色(畫刷),用於複輔音實心圖形,如FillRect,FillCircle;

TextColor: 文字顏色,用於文字繪製時指定字體的顏色;

繪圖上下文中的顏色值,用戶可以使用RGB宏來表示,該宏的3個參數依次分別代表紅,綠,藍三基色,分量範圍為0~255.比如可以用以下方式來描述:

紅色:RGB(255,0,0)

綠色:RGB(0,255,0)

黃色:RGB(255,255,0)

白色:RGB(255,255,255)

黑色:RGB(0,0,0)

之所以使用3個顏色來分別作用於不同的繪圖輸出,好處是在用戶編程時,當繪製的圖形種類多樣,與字體混合繪製時,可以減少用戶代碼反覆修改/切換顏色的情況,叢用戶角度來看,降低了使用上的繁瑣度,增強程序的可讀性。

三種顏色使用對象如圖 3-1所示:

2 API說明

2.1 SetRopCode: 設置當前光柵碼

u32 SetRopCode(HDC hdc,u32 rop_code);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

rop_code: 新的光柵碼,關於光柵碼含義,請參考gkernel.h。

返回值:

舊的光柵碼。

2.2 GetRopCode: 獲得當前光柵碼

u32 GetRopCode(HDC hdc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

返回值:

當前光柵碼。

2.3 MoveTo: 設置當前坐標位置

void MoveTo(HDC hdc,int x,int y,POINT *old_pt);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

x,y: 新的坐標位置。

old_pt: 輸出舊的坐標位置,如果該參數為NULL,則忽略該參數。

返回值: 無。

2.4 SetDrawColor: 設備當前畫筆顏色

u32 SetDrawColor(HDC hdc,u32 color);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

color: 新的畫筆顏色。

返回值:

舊的畫筆顏色。

說明:

當前畫筆顏色會被繪製類繪圖函數使用,如DrawLine,DrawRect…

2.5 GetDrawColor: 獲得當前畫筆顏色

u32 GetDrawColor(HDC hdc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

返回值:

當前畫筆顏色。

2.6 SetFillColor: 設置當前填充顏色

u32 SetFillColor(HDC hdc,u32 color);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

color: 新的填充顏色。

返回值:

舊的填充顏色。

說明:

當前填充顏色會被填充類繪圖函數使用,如FillRect,FillCircle…

2.7 GetFillColor: 獲得當前填充顏色

u32 GetFillColor(HDC hdc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

返回值:

當前填充顏色。

2.8 SetTextColor: 設置當前文字顏色

u32 SetTextColor(HDC hdc,u32 color);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

color: 新的文字顏色。

返回值:

舊的文字顏色。

說明:

當前文字顏色會被文字繪製類函數使用,如TextOut,DrawText…

2.9 GetTextColor: 獲得當前文字顏色

u32 GetTextColor(HDC hdc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

返回值:

當前文字顏色。

2.10 SetFont: 設置當前字體

HFONT SetFont(HDC hdc,HFONT hFont);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

hFont: 新的字體句柄。

返回值:

舊的字體句柄。

說明:

當前字體會被文字繪製類函數使用,如TextOut,DrawText…

2.11 GetFont: 獲得當前字體

HFONT GetFont(HDC hdc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

返回值:

當前字體句柄。

2.12 SetPixel: 繪製像素

void SetPixel(HDC hdc,s32 x,s32 y,u32 color);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

x,y: 像素點的坐標。

color: 顏色值。

返回值: 無。

2.13 DrawLine: 畫線

void DrawLine(hdc hdc,s32 x0,s32 y0,s32 x1,s32 y1);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

x0,y0: 起始坐標。

x1,y1: 結束坐標,該點也會被繪製。

返回值: 無。

該函數隻繪製單個像素寬度的任意直線,使用繪圖上下文中的DrawColor作為顏色值,結束坐標點,也將會被繪製。

2.14 DrawLineTo: 使用當前位置畫線

void DrawLineTo(HDC hdc,s32 x,s32 y);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

x,y: 結束坐標位置,該點也會被繪製。

返回值: 無。

該函數隻繪製單個像素寬度的任意直線,使用繪圖上下文中的DrawColor作為顏色值。

繪製完成後,該函數會將繪圖上下文中的當前坐標位置更新為本次畫線的結束坐標值。

2.15 TextOut: 在指定位置繪製字符串

BOOL TextOut(HDC hdc, s32 x, s32 y,LPCWSTR text,s32 count);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

text: 需要繪製的字符串。

count: 需要繪製的字符數量,該參數小於0時,將繪製整個字符串。

x,y兩個參數沒說明,是字符串的左上角坐標還是左下角坐標?

返回值:

TRUE:成功; FALSE:失敗。

說明:

輸出的字符串,使用繪圖上下文中的TextColor作為顏色值,支持回車和換行符格式,當字符串超出屏幕範圍時,不會自動換行,而是直接裁剪掉。

2.16 DrawText: 在指定矩形內繪製字符串

BOOL DrawText(HDC hdc,LPWSTR text,s32 count,const RECT *prc,u32 flag);

頭文件::

gdd.h

參數:

hdc: 繪圖上下文句柄。

text: 需要繪製的字符串。

count: 需要繪製的字符數量,該參數小於0時,將繪製整個字符串。

prc: 字符串輸出的矩形。

flag: 繪製標記,指定字符串在豎直方向位置有以下三種情形:

DT_VCENTER: 文字在矩形內垂直居中對齊;

DT_TOP: 文字在矩形內頂部對齊;

DT_BOTTOM: 文字在矩形內底部對齊。

指定字符串在水平方向位置也有以下三種情形:

DT_CENTER: 文字在矩形內水平居中對齊;

DT_LEFT: 文字在矩形內左對齊;

DT_RIGHT: 文字在矩形內右對齊;

其他情形有:

DT_BORDER: 繪製矩形邊框。

DT_BKGND: 繪製矩形背景。

繪製標記flag從豎直方向及水平方向位置三種情形中各選取其一與其他情形中兩個任意組合。

返回值:

TRUE:成功; FALSE:失敗。

說明:

輸出的字符串,使用繪圖上下文中的TextColor作為顏色值,支持回車和換行符格式。;繪製矩形邊框,使用繪圖上下文中的DrawColor作為顏色值;填充矩形背景,使用繪圖上下文中的FillColor作為顏色值。

2.17 DrawRect: 繪製矩形

void DrawRect(HDC hdc,const RECT *prc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

prc: 需要繪製的矩形參數。

返回值: 無

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值,繪製一個空心矩形。

2.18 FillRect: 填充矩形

void FillRect(HDC hdc,const RECT *prc);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

prc: 需要填充的矩形參數。

返回值: 無

說明:

該函數使用繪圖上下文中的FillColor作為顏色值,填充一個實心矩形。

​​​​​​2.19 FillRectEx: 使用指定顏色填充矩形

void FillRectEx(HDC hdc,const RECT *prc,u32 color);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

prc: 需要填充的矩形參數。

color: 填充顏色。

返回值: 無

說明:

該函數使用指定的顏色值,填充一個實心矩形。

2.20 GradientFillRect: 漸變填充矩形

void GradientFillRect(HDC hdc,const RECT *prc,u32 color1,u32 color2,u32 mode);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

prc: 需要繪製的矩形參數。

color1: 起始顏色值。

color2: 結束顏色值。

mode: 填充模式,可以是以下值之一:

CN_FILLRECT_MODE_H: 水平填充,Color0表示左邊顏色,Color1右邊;

CN_FILLRECT_MODE_V: 垂直填充,Color0表示上邊顏色,Color1下邊;

CN_FILLRECT_MODE_SP: 傾斜填充,Color0表示左上角顏色,Color1右下角;

CN_FILLRECT_MODE_SN: 傾斜填充,Color0表示右上角顏色,Color1左下角。

返回值: 無。

​​​​​​​2.21 DrawCircle: 繪製空心圓

void DrawCircle(HDC hdc,s32 cx,s32 cy,s32 r);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要繪製的圓形的中心坐標。

r: 需要繪製的圓形的半徑值(像素單位)

返回值: 無

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值,繪製一個空心圓。

​​​​​​​2.22 FillCircle: 填充實心圓

void DrawCircle(HDC hdc,s32 cx,s32 cy,s32 r);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要繪製的圓形的中心坐標。

r: 需要繪製的圓形的半徑值(像素單位)

返回值: 無

說明:

該函數使用繪圖上下文中的FillColor作為顏色值,填充一個實心圓。

​​​​​​​2.23 DrawEllipse: 繪製空心橢圓

void DrawEllipse(HDC hdc,s32 cx,s32 cy,s32 rx,s32 ry);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要繪製的橢圓的中心坐標。

rx,ry:需要繪製的橢圓的水平和垂直方向半徑值(像素單位)

返回值: 無

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值,繪製一個空心橢圓。

​​​​​​​2.24 FillEllipse: 填充實心橢圓

void FillEllipse(HDC hdc,s32 cx,s32 cy,s32 rx,s32 ry);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要填充的橢圓的中心坐標。

rx,ry:需要填充的橢圓的水平和垂直方向半徑值(像素單位)

返回值: 無

說明:

該函數使用繪圖上下文中的FillColor作為顏色值,繪製一個實心橢圓。

​​​​​​​2.25 DrawSector: 繪製空心扇形

void DrawSector(HDC hdc,s32 cx,s32 cy,s32 r,s32 a1,s32 a2);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要繪製的扇形的中心坐標。

r:需要繪製的扇形的值(像素單位) 。

a1,a2:需要繪製的扇形的起始和結束角度。

返回值: 無

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值,繪製一個空心扇形。

​​​​​​​2.26 FillSector: 填充實心扇形

void FillSector(HDC hdc,s32 cx,s32 cy,s32 r,s32 a1,s32 a2);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

cx,cy: 需要填充的扇形的中心坐標。

r:需要填充的扇形的值(像素單位) 。

a1,a2:需要填充的扇形的起始和結束角度。

返回值: 無

說明:

該函數使用繪圖上下文中的FillColor作為顏色值,填充一個實心扇形。

​​​​​​​2.27 DrawBezier3: 繪製連續3階貝塞爾線

void DrawBezier3(HDC hdc,const POINT *pt,s32 count);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

pt: 需要繪製的貝塞爾線的坐標點。

count: 需要繪製的貝塞爾線的坐標點數量。

返回值: 無。

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值。

​​​​​​​2.28 DrawPolyLine: 繪製折線

void DrawPolyLine(HDC hdc,const POINT *pt,int count);

頭文件:

gdd.h

參數:

hdc: 繪圖上下文句柄。

pt: 需要繪製的曲線的坐標點。

count: 需要繪製的曲線的坐標點數量。

返回值: 無。

說明:

該函數使用繪圖上下文中的DrawColor作為顏色值。

2.29 DrawGroupBox: 繪製組合框

void DrawGroupBox(HDC hdc,const RECT *prc,const WCHAR *text);

頭文件::

gdd.h

參數:

hdc: 繪圖上下文句柄。

prc: 需要繪製的組合框的矩形參數。

text: 組合框文字內容。

返回值: 無。

說明:

組合框是將文本框和列表框的功能融合在一起的一種控制項。用戶既可以在文本框中輸入,也可以從列表框中選擇一個列表項來完成輸入。

該函數使用設備上下文中的TextColor作為組合框的文字顏色值;使用DrawColor作為組合框邊框顏色值。 組合框可用於對用戶繪製的內容進行分組標識,這使得界面在視覺效果上更加整潔美觀;界面內容也更加直觀明了。

​​​​​​​2.30 DrawBMP: 繪製BMP格式圖片

void DrawBMP(HDC hdc,s32 x,s32 y, const void *bmp_data);

頭文件::

gdd.h

參數:

hdc: 繪圖上下文句柄。

x,y: 繪製到hdc中的坐標位置。

bmp_data: bmp格式圖片的數據源。

返回值: 無。

說明:bmp格式圖片的數據源必須是完整的BMP文件原始數據,包含有BMP的文件頭信息。

​​​​​​​2.31 AlphaBlendColor: 計算兩個顏色按Alpha混合後的顏色值

u32 AlphaBlendColor(u32 bk_c,u32 fr_c,u8 alpha);

頭文件:

gdd.h

參數:

bk_c: 背景色(XRGB8888格式)。

fr_c: 前景色(XRGB8888格式)。

apha: Alpha分量值(0~255範圍)。

返回值:

混合後的顏色值(XRGB8888格式)。

說明:

Alpha顏色混合公式為: 顯示顏色=源顏色×alpha/255+背景顏色×(255-alpha)/255;

2.32 UpdateDisplay: 立即更新顯示到屏幕

void UpdateDisplay(void);

頭文件:

gdd.h

參數: 無。

返回值: 無。

關鍵字: