GDI 绘图

2023-11-12

目录

GDI 绘图

画点

画线

画封闭图形 

画笔:

画刷

其他


DC(Device Context): 绘图设备

HDC: 绘图设备句柄

GDI(Microsoft Graphics Device Interface) Win32提供的绘图API

GDI 绘图

0、PAINTSTRUCT结构

typedef struct tagPAINTSTRUCT {
HDC  hdc;                //绘图设备句柄
BOOL fErase;             //背景是否需要重新绘制
RECT rcPaint;            //请求指定绘制矩形的左上角和右下角
BOOL fRestore;           //系统预留的
BOOL fIncUpdate;         //系统预留的 
BYTE rgbReserved[32];    //系统预留的,保留的内存块
} PAINTSTRUCT, *PPAINTSTRUCT;

         调用 BeginPaint函数启动绘画操作。这个函数填充了PAINTSTRUCT结构体,并提供了重新绘制请求的信息。当前更新区域是在PAINTSTRUCTrcPaint成员中给出的。此更新区域是相对于客户端区域定义的。

1、窗口句柄得到设备环境句柄HDC, 

        1、   采用BeginPaint获取HDC   

PAINTSTRUCT ps;// 保存
HDC hdc = ::BeginPaint( hwnd, &ps );
/*
     此处添加绘图代码
*/
::EndPaint( hwnd, &ps );

注:
    获得的hdc的有效区域仅限于客户区无效区域的设备环境句柄,不包括标题栏、边框等。

        2、   采用GetWindowDC获取HD

HDC hdc = ::GetWindowDC( hwnd );
/*
     此处添加绘图代码
*/
::ReleaseDC( hwnd, hdc );

注:
    绘制区域是整个窗口(边框、标题栏、客户区的总和)。

        3、采用GetDC获取HDC

HDC hdc = ::GetDC( hwnd );
/* 
    此处添加绘图代码
*/
::ReleaseDC( hwnd, hdc );

注:
    获得的hdc的有效区域仅限于客户区有效区域的设备环境句柄,不包括标题栏、边框等。

画点

1、SetPixel    指定坐标处的像素设为指定的颜色

COLORREF SetPixel(
    HDC hdc, 
    int X, 
    int Y, 
    COLORREF crColor
);

画线

1、   MoveToEx       将当前位置移动到某一点

WINGDIAPI 
BOOL WINAPI MoveToEx( 
    __in HDC hdc,           //当前设备的句柄
    __in int x,             // x 坐标
    __in int y,             // y 坐标
    __out_opt LPPOINT lppt  //移动前的坐标位置
);

2、LineTo         从当前点到目标点进行画线

WINGDIAPI 
BOOL WINAPI LineTo( 
    __in HDC hdc, 
    __in int x, 
    __in int y
);

画封闭图形 

1、Rectangle  矩形

BOOL Rectangle(
  __in HDC hdc,
  __in int left,
  __in int top,
  __in int right,
  __in int bottom
);

2、Ellipse 圆形等

        

画笔:

1、创建画笔

WINGDIAPI
HPEN    
WINAPI CreatePen( 
    __in int iStyle,    //画笔样式
    __in int cWidth,    //画笔粗细
    __in COLORREF color //画笔颜色
);   创建成功返回句柄

注:

        PS_SOILD  实心线,可以指定任意像素宽,其他线形只能一个像素

2、将画笔应用到DC中

HGDIOBJ SelectObject(
  HDC hdc,          // 绘图设备句柄
  HGDIOBJ hgdiobj   // GDI绘图对象句柄
);  返回原来GDI绘图对象句柄

3、绘图

4、取出 GDI 绘图对象,即将原来的GDI绘图对象通过SelectObject函数放回去

5、销毁GDI绘图对象

BOOL DeleteObject(
    HGDIOBJ hObject //GDI绘图对象句柄
);

注:

        只能删除不被DC使用的GDI绘图对象,释放前必须从DC中取出

画刷

1、创建画刷

HBRUSH CreateSolidBrush(   //创建实心画刷
    __in COLORREF color
);

HBRUSH CreateHatchBrush(    //创建纹理画刷
    int fnStyle, 
    COLORREF clrref
);

2、将画笔应用到DC中

3、绘图

4、取出 GDI 绘图对象,即将原来的GDI绘图对象通过SelectObject函数放回去

5、销毁GDI绘图对象

其他

        

HGDIOBJ GetStockObject(
    int fnObject
);

函数功能:该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。

参数:
  fnObject:指定对象的类型,该参数可取如下值之一;
  BLACK_BRUSH:黑色画笔;DKGRAY_BRUSH:暗灰色画笔;DC_BRUSH:在Windows98,Windows NT 5.0和以后版本中为纯颜色画笔,缺省色为白色,可以用SetDCBrushColor函数改变颜色,更多的信息参见以下的注释部分。GRAY_BRUSH:灰色画笔;HOLLOW_BRUSH:空画笔(相当于HOLLOW_BRUSH);
  LTGRAY_BRUSH:亮灰色画笔;NULL_BRUSH:空画笔(相当于HOLLOW_BRUSH);
  WHITE_BRUSH:白色画笔;BLACK_PEN:黑色钢笔;
  DC_PEN:在Windows98、Windows NT 5.0和以后版本中为纯色钢笔,缺省色为白色,使用SetDCPenColor函数可以改变色彩,更多的信息,参见下面的注释部分。
  WHITE_PEN:白色钢笔;ANSI_FIXED_FONT:在Windows中为固定间距(等宽)系统字体;
  ANSI_VAR_FONT:在Windows中为变间距(比例间距)系统字体;
  DEVICE_DEFAUCT_FONT:在WindowsNT中为设备相关字体;
  DEFAULT_GUI_FONT:用户界面对象缺省字体,如菜单和对话框;
  OEM_FIXED_FONT:原始设备制造商(OEM)相关固定间距(等宽)字体;
  SYSTEM_FONT:系统字体,在缺省情况下,系统使用系统字体绘制菜单,对话框控制和文本;
  SYSTEM_FIXED_FONT:固定间距(等宽)系统字体,该对象仅提供给兼容16位Windows版本;
  DEFAULT_PALETTE:缺省调色板,该调色板由系统调色板中的静态色彩组成。
  返回值:如果成功,返回值标识申请的逻辑对象,如果失败,返回值为NULL。
  WindowsNT:若想获得更多错误信息,请调用GetLastError函数。
  注释:仅在CS_HREDRAW和CS_UREDRAW风格的窗口中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH对象。
  如果在其他风格的窗口中使灰色画笔,可能导致在窗口移动或改变大小之后出现画笔模式错位现象,原始储存画笔不能被调整。
  HOLLOW_BRUSH和NULL_BRUSH储存对象相等。
  由DEFAULT_GUI_FONT储存对象使用的字体将改变。当想使用菜单、对话框和其他用户界面对象使用的字体时请使用此储存对象。
  不必要通过调用DeleteObject函数来删除储存对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDI 绘图 的相关文章

  • 【C#】VS2019 未能在命名空间“Microsoft.Win32”中找到类型名“RegistryKey” 的解决办法

    文章目录 前言解决方案 结语 前言 今天在写 C 实验的时候遇到了 未能在命名空间 Microsoft Win32 中找到类型名 RegistryKey 此类型已转发到程序集 Microsoft Win32 Registry Version
  • zlib win32编译

    1 run cmd 2 34 C Program Files x86 Microsoft Visual Studio 2019 Community VC Auxiliary Build vcvars32 bat 34 3 nmake f w
  • [Win32]一个调试器的实现(十)显示变量

    上回介绍了微软的符号模型 xff0c 有了这个基础知识 xff0c 这回我们向 MiniDebugger 中添加两个新功能 xff0c 分别是显示变量列表和以指定类型显示内存内容 显示变量列表用于列出当前函数内的局部变量或者全局变量 xff
  • 以太坊客户端Geth命令用法-参数详解

    Geth是在以太坊智能合约开发中最常用的工具 必备开发工具 一个多用途的命令行工具 熟悉Geth可以让我们有更好的效率 大家可收藏起来作为Geth命令用法手册 本文主要是对geth help的翻译 基于最新的geth 1 7 3 stabl
  • 转:windows消息传递机制

    Windows是一个消息 Message 驱动系统 Windows的消息提供了应用程序之间 应用程序与Windows系统之间进行通信的手段 应用程序想要实现的功能由消息来触发 并且靠对消息的响应和处理来完成 必须注意的是 消息并非是抢占性的
  • 几何画笔

    在看书时看到了这个概念 画笔可以分为几何画笔和装饰画笔 目前从CSDN以及MSDN上大致看了一下几何画笔的用法 代码如下 HPEN hPen NULL DWORD dwStyle PS GEOMETRIC PS DASHDOT PS END
  • 网狐荣耀手机端内核源码

    网狐荣耀手机端内核源码 实测 可用 链接 https pan baidu com s 1YT GWgFCDxYqrez7e EJqw 提取码 0ezk
  • 绕懵逼之同步/异步 阻塞/非阻塞

    被面试官绕蒙蔽了 特此整理总结一下 1概念解析 1 1 同步与异步概念描述 同步异步概念与消息的通知机制有关 所谓同步就是一个任务的完成需要依赖另外一个任务时 只有等待被依赖的任务完成后 依赖的任务才能算完成 这是一种可靠的任务序列 要么成
  • 以互联网思维做好客户端软件

    加入爱奇艺的时间不长 但我感受到的震撼却不小 在外企打拼了十几个春秋 今年终于有机会进入一家国内顶尖的互联网企业 真真切切地有一番不太一样的体验 不过 我今天并不想说在外企工作与国内企业的差别 目前 我负责 爱奇艺PPS影音 PC客户端软件
  • 类的静态成员变量为什么不能再h文件类外初始化

    h文件 class Image public static void AddProtoType Image iamge Prototype nsize iamge private static Image Prototype 10 stat
  • 探秘app.asar

    开发过Electron客户端的都知道 在package json的build节点下 如果设置 asar true 软件打包时会把程序文件合成为一个app asar文件 软件安装后 可以在安装目录的resources子目录下找到它 packa
  • 让CPU画出图形(其实很简单的)

    本例子是当初微软的一个题目 希望windows任务管理器的CPU的占有率 是一个正旋曲线 如果是你 你会如何解决这个问题呢 先上图吧 由于cpu要处理其他电脑程序 只能画出来大概的模样 其实我当时想这个问题时候 是不是考虑对cpu进行操作
  • 使用纯flutter3.0版本,2个dart文件,搭建ChatGPT简易版聊天客户端程序(含openai与api2d版本)

    文章目录 1 效果展示 2 按钮的搭建 1个组件 3 聊天窗口的搭建 1个dart 4 API请求的实现 1个dart 使用纯Flutter 3 0版本 仅需2个Dart文件 即可搭建ChatGPT简易版聊天客户端程序 包括OpenAI与A
  • WiFiAssistant 无线承载网络设置助手的开发历程(一)

    今年6月中旬 我曾经基于MFC写过一个WiFiHelper的小程序 开启和关闭虚拟WiFi 并且能够支持定时关机 当然 真正使用虚拟WiFi还需要手动设置共享 并且 由于我的是台式机 所以并没有去升级WiFiHelper 估计是即将毕业的缘
  • 提权重启自己

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • C# 网络编程之Tcp实现客户端和服务器聊天

    最近使用Socket网络套接字编程中 在同步与异步通讯中客户端与服务器总是无法响应 但在学习Tcp协议编程中完成了通讯聊天功能 下面简单讲讲我最近学到的及Tcp聊天的源代码及详细注释 Tcp协议是一个传输层的协议 在Tcp协议编程中它通常使
  • ShellExecuteEx中与被调进程同步

    在实际的开发中会遇到这样的情况 A进程在运行时 需要调起B进程完成某些工作 例如取回关键文件 且必须等待该进程完成工作结束后才能往下继续 那么这时候 就可以采用ShellExecuteEx和WaitForSingleObject的结合对被调
  • OpenGL ES 2.0升级到3.0配置win32环境以及编译所遇bug

    安装win32平台的OpenGL ES 3 0模拟器 一 安装3 0模拟器 一般用32位的 https developer arm com products software development tools graphics devel
  • 10分钟带你了解轻量级插件框架x3py

    写在前面 由于本人目前主要从事的是Windows客户端开发方面的工作 所以本文介绍x3py的侧重点也是从客户端程序开发者方面叙述的 本文主要参考整理自x3py的官方Wiki 修正了一些官方示例中的错误 有兴趣的同学可以直接阅读原文 设计目的
  • Win32 文件分割合并

    CFileSplitUtils h pragma once include

随机推荐