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


    目录

    1 GDD绘图系统概述

    1.1绘图上下文

    1.2 DrawColor,FillColor,TextColor的作用与区别

    2 API说明

    2.1 SetRopCode: 设置当前光栅码

    2.2 GetRopCode: 获得当前光栅码

    2.3 MoveTo: 设置当前坐标位置

    2.4 SetDrawColor: 设备当前画笔颜色

    2.5 GetDrawColor: 获得当前画笔颜色

    2.6 SetFillColor: 设置当前填充颜色

    2.7 GetFillColor: 获得当前填充颜色

    2.8 SetTextColor: 设置当前文字颜色

    2.9 GetTextColor: 获得当前文字颜色

    2.10 SetFont: 设置当前字体

    2.11 GetFont: 获得当前字体

    2.12 SetPixel: 绘制像素

    2.13 DrawLine: 画线

    2.14 DrawLineTo: 使用当前位置画线

    2.15 TextOut: 在指定位置绘制字符串

    2.16 DrawText: 在指定矩形内绘制字符串

    2.17 DrawRect: 绘制矩形

    2.18 FillRect: 填充矩形

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

    2.20 GradientFillRect: 渐变填充矩形

    ​​​​​​​2.21 DrawCircle: 绘制空心圆

    ​​​​​​​2.22 FillCircle: 填充实心圆

    ​​​​​​​2.23 DrawEllipse: 绘制空心椭圆

    ​​​​​​​2.24 FillEllipse: 填充实心椭圆

    ​​​​​​​2.25 DrawSector: 绘制空心扇形

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

    ​​​​​​​2.27 DrawBezier3: 绘制连续3阶贝塞尔线

    ​​​​​​​2.28 DrawPolyLine: 绘制折线

    2.29 DrawGroupBox: 绘制组合框

    ​​​​​​​2.30 DrawBMP: 绘制BMP格式图片

    ​​​​​​​2.31 AlphaBlendColor: 计算两个颜色按Alpha混合后的颜色值

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


    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所示:

     图 3-1三种颜色效果示意图

    2 API说明

    2.1 SetRopCode: 设置当前光栅码

    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

    参数: 无。

    返回值: 无。

     

  • 相关阅读:
    二维矩形件排样算法之最低水平线算法实现
    论文研读 - share work - QPipe:一种并行流水线的查询执行引擎
    Linux线程同步对象:互斥体、信号量、条件变量、读写锁
    Codeforces Round #833 (Div. 2) C. Zero-Sum Prefixes
    【深度学习】图像修复的一些模型
    力扣练习—— 66砖墙
    BufferPool之链表
    B站基于Iceberg+Alluxio助力湖仓一体项目落地实践
    【C进阶】之指针函数和函数指针
    【UE5】通过C++代码创建蓝图对象
  • 原文地址:https://blog.csdn.net/wangjianzhongfj/article/details/39121133