DJYGUI系列文章八:GDD绘图系统
yuyutoo 2025-01-12 19:56 5 浏览 0 评论
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
参数: 无。
返回值: 无。
相关推荐
- 全局和隐式 using 指令详解(全局命令)
-
1.什么是全局和隐式using?在.NET6及更高版本中,Microsoft引入了...
- 请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍
-
1、介绍模块化单体是一种架构风格,代码是根据模块的概念构成的。对于许多组织而言,模块化单体可能是一个很好的选择。它有助于保持一定程度的独立性,这有助于我们在需要的时候轻松过渡到微服务架构。Spri...
- ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战
-
我是一位多年后端经验的工程师,其中前几年用ASP.NET...
- .NET AOT 详解(.net 6 aot)
-
简介AOT(Ahead-Of-TimeCompilation)是一种将代码直接编译为机器码的技术,与传统的...
- 一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)
-
哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!...
- asar归档解包(游戏arc文件解包)
-
要学习Electron逆向,首先要有一个Electron开发的程序的发布的包,这里就以其官方的electron-quick-start作为例子来进行一下逆向的过程。...
- 在PyCharm 中免费集成Amazon CodeWhisperer
-
CodeWhisperer是Amazon发布的一款免费的AI编程辅助小工具,可在你的集成开发环境(IDE)中生成实时单行或全函数代码建议,帮助你快速构建软件。简单来说,AmazonCodeWhi...
- 2014年最优秀JavaScript编辑器大盘点
-
1.WebstormWebStorm是一种轻量级的、功能强大的IDE,为Node.js复杂的客户端开发和服务器端开发提供完美的解决方案。WebStorm的智能代码编辑器支持JavaScript,...
- 基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享
-
项目简介:基于JS的超轻量级聊天软件。前端:vue、iview、electron实现的PC桌面版聊天程序,主要适用于私有云项目内部聊天,企业内部管理通讯等功能,主要通讯协议websocket。支持...
- JetBrains Toolbox推出全新产品订阅授权模式
-
捷克知名软件开发公司JetBrains最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境IntelliJIDEA,相信很多开发者都有所了解。而近期自2015年11月2日起,JetBr...
- idea最新激活jetbrains-agent.jar包,亲测有效
-
这里分享一个2019.3.3版本的jetbrains-agent.jar,亲测有效,在网上找了很多都不能使用,终于找到一个可以使用的了,这里分享一下具体激活步骤,此方法适用于Jebrains家所有产品...
- CountDownTimer的理解(countdowntomars)
-
CountDownTimer是android开发常用的计时类,按照注释中的说明使用方法如下:kotlin:object:CountDownTimer(30000,1000){...
- 反射为什么性能会很慢?(反射时为什么会越来越长)
-
1.背景前段时间维护一个5、6年前的项目,项目总是在某些功能使用上不尽人意,性能上总是差一些,仔细过了一下代码发现使用了不少封装好的工具类,工具类里面用了好多的反射,反射会影响到执行效率吗?盲猜了一...
- btrace 开源!基于 Systrace 高性能 Trace 工具
-
介绍btrace(又名RheaTrace)是抖音基础技术团队自研的一款高性能AndroidTrace工具,它基于Systrace实现,并针对Systrace不足之处加以改进,核心改进...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- .NET 奇葩问题调试经历之3——使用了grpc通讯类库后,内存一直增长......
- 全局和隐式 using 指令详解(全局命令)
- 请停止微服务,做好单体的模块化才是王道:Spring Modulith介绍
- ASP.NET程序集引用之痛:版本冲突、依赖地狱等解析与实战
- .NET AOT 详解(.net 6 aot)
- 一款基于Yii2开发的免费商城系统(一款基于yii2开发的免费商城系统是什么)
- asar归档解包(游戏arc文件解包)
- 在PyCharm 中免费集成Amazon CodeWhisperer
- 2014年最优秀JavaScript编辑器大盘点
- 基于springboot、tio、oauth2.0前端vuede 超轻量级聊天软件分享
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)