百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

DJYGUI系列文章八:GDD绘图系统

yuyutoo 2025-01-12 19:56 3 浏览 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

参数: 无。

返回值: 无。

相关推荐

建筑福利-pdf转dwg格式转换器,再也不用描图-极客青年

作为一名经常熬夜画图的建筑狗或者cad用户,你体验过pdf图纸描图到cad吗?前几天一个老同学找我,说他的毕业设计需要我帮忙,发给我一份pdf图纸文件,问我怎么把pdf图纸转换成dwg格式。机智的我灵...

想学 HTML,不知从何入手?看完这篇文章你就知道了

很多人都说HTML是一门很简单的语言,看看书,看看视频就能读懂。但是,如果你完全没有接触过,就想通过看一遍教程,背背标签,想要完全了解HTML,真的有点太天真了。HTML中文...

「前端」HTML之结构

今天继续为大家分享前端的知识,如果对前端比较感兴趣的小伙伴,可以关注我,我会更大家继续分享更多与前端相关的内容,当然如果内容中又不当的或者文字错误的,欢迎大家在评论区留言,我会及时修改纠正。1.初识H...

手把手教你使用Python网络爬虫下载一本小说(附源码)

大家好,我是Python进阶者。前言前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。...

用于处理pdf文件格式的转换器

在上传过程中如果单个文件太大则容易中断,而且文件太大的话对与存储也有些弊端。那么我们应该想到将文件进行压缩(注意这里压缩指的是不改变文件格式的压缩,而不是用变成压缩文件。这里就将以下用专门的软件压缩P...

乐书:在线 Kindle 电子书制作和转换工具

之前Kindle伴侣曾推荐过可以在Windows和Mac系统平台上运行的kindle电子书制作软件Sigil(教程),用它可以制作出高质量的的ePub格式电子书,当然最后还需要通...

付费文档怎么下载?教你5种方法,任意下载全网资源

网上查资料的时候,经常遇到需要注册登录或者付费的才能复制或者是下载,遇到这种情况大多数人都会选择重新查。...

捡来的知识!3种方法随便复制网页内容,白嫖真香呀

网上的资源真的多,所以许多人常常会从网上找资料。我们看到感兴趣的内容,第一时间可能会想要收入囊中。比如说截个图啊,或者挑选有意思的句子复制粘贴,记录下来。可是,有些时候,却会遇到这样的情况:1、内容不...

AI的使用,生成HTML网页。

利用deepseek,豆包,kimi以及通义千问,写入相同的需求。【写一个网页,实现抽奖功能,点击“开始”,按键显示“停止”,姓名开始显示在屏幕上,人员包括:“张三”,“里斯”,“Bool”,“流水废...

pdf转换成jpg转换器 4.1 官方正式版

pdf转换成jpg工具软件简介pdf转换成jpg转换器是一款界面简洁,操作方便的pdf转换成jpg转换器。pdf转换成jpg转换器可以将PDF文档转换为JPG,BMP,GIF,PNG,TIF图片文件。...

办公必备的office转换成pdf转换器怎么用?

2016-02-2415:53:37南方报道网评论(我要点评)字体刚从校园走出社会,对于快节奏的办公环境,难免会觉得有些吃力。在起步阶段力求将手头上的事情按时完工不出错,但是渐渐的你会发现,别人只...

为什么PDF转Word大多要收费?

PDF转Word大多都要收费?并非主要是因为技术上的难度,而是基于多方面的商业和版权考虑的,下面给大家浅分析下原因:...

如何用python生成简单的html report报告

前提:用python写了一个简单的log分析,主要也就是查询一些key,value出来,后面也可以根据需求增加。查询出来后,为了好看,搞个html表格来显示。需要的组件:jinja2flask...

学用系列|如何搞定word批量替换修改和格式转换?这里一站搞定

想必不少朋友都会碰到批量修改word文档内容、压缩文档图片、文件格式转换等重复性文档处理工作的需要,今天胖胖老师就推荐给大家一个免费工具XCLWinKits,一站搞定你所有的需要。什么是XCLWinK...

这款PDF文档转换神器,能帮你解决PDF使用中的许多难点

不管是平时的学习还是工作,相信许多朋友都经常接触PDF文件。可以说,PDF文件在我们的日常办公学习过程中的重要性和Word文档一样重要。在之前的更新中,小编介绍了几款非常不错的PDF文档格式转换软件,...

取消回复欢迎 发表评论: