关于Gdi+和GdiplusStartup

2023-10-29

GDI+实际上是一组类的定义,封装了gdi+的几乎所有API,当然使用方法就要从这些“例子”里边寻找了:)本文正是尝试用GDI+写一个纯SDK的程序,语言自然是我最喜欢的语言WIN32ASM.这个程序很简单,就是用GDI+画了一条直线。算是抛砖引玉吧,感兴趣的可以自己探索其他函数的用法。
使用GDI+ API之前,必须先调用GdiplusStartup这个函数,作用是初始化GDI+函数库。这个函数在SDK中就有。函数的原型是:

  
Status GdiplusStartup(ULONG_PTR token *token,
const GdiplusStartupInput *input,
GdiplusStartupOutput *output
);
   

第一个参数是指向一个32位的无符号整型的指针,也就是指向一个汇编中的DWORD变量的指针,用于接受GDI+的TOKEN.TOKEN可以暂时理解成一个句柄,就像窗口的句柄类似。这个参数在调用GdiplusShutdown的时候用到。这个函数在结束GDI+编程后调用,起作用是释放GDI+的资源。
第二个以及第三个参数是指向两个结构体变量的指针。GdiplusStartupInput的定义如下:
struct GdiplusStartupInput
{
UINT32 GdiplusVersion;
DebugEventProc DebugEventCallback;
BOOL SuppressBackgroundThread;
BOOL SuppressExternalCodecs;

GdiplusStartupInput(
DebugEventProc debugEventCallback = NULL,
BOOL suppressBackgroundThread = FALSE,
BOOL suppressExternalCodecs = FALSE)
{
GdiplusVersion = 1;
DebugEventCallback = debugEventCallback;
SuppressBackgroundThread = suppressBackgroundThread;
SuppressExternalCodecs = suppressExternalCodecs;
}
};
这个定义看似复杂,实际就四个32位的变量,可以定义成如下的形式:
struct GdiplusStartupInput
{
UINT32 GdiplusVersion;
DebugEventProc DebugEventCallback;
BOOL SuppressBackgroundThread;
BOOL SuppressExternalCodecs;
}
一般这个结构体初始化成1,0,0,0即可,并且这时候这个函数的最后一个参数GdiplusStartupOutput可以忽略,直接用NULL就可以

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

关于Gdi+和GdiplusStartup 的相关文章

  • linux更改环境变量语言utf8,记Centos修改语言环境变量$LANG不生效原因

    问题背景 编辑 etc locale conf 改成 LANG en US UTF 8 重启服务器后 进入系统 仍然是显示中文 排查分析 复现问题环境 确认当前系统支持 en US UTF 8 语言环境 en US utf8 和 en US
  • Centos 7 设置CA根证书

    root vpn mkdir csk rootca root vpn csk rootca cp a etc pki CA certs certs存放已颁发的证书 root vpn csk rootca cp a etc pki CA ne
  • DOS网络启动盘

    DOS网络启动盘 这张从97年到现在我一直保留并维护的工具盘 也许平时用的机会不多 但总在关键时刻救急 它能帮你在无法通过光驱安装操作系统时 通过网络或USB移动盘把几百兆的Windows系统安装文件复制到本地硬盘来进行安装 当然还可以用它
  • 解决安装visual studio installer 报错,无法下载安装文件的问题

    文章目录 解决安装visual studio installer 报错 无法下载安装文件的问题 Visual Studio 2019下载官网 一 VS2019安装问题 问题 解决方法1 解决方法2 解决方法3 解决方法4 解决方法5 解决方
  • 设计模式(四)单例和简单工厂的融合

    前面三篇文章介绍了三种模式 单例 简单工厂和工厂方法 其中 简单工厂和工厂方法都是基于同一个实际问题 但是 这个例子里有几个问题 1 职工的创建在main函数中 不合理 可能多个函数都会需要访问职工信息 2 职工是程序直接创建的 不合理 一
  • Unity 第一期

    1 让一个物体围绕某一点旋转 有几种方法 分别是什么 旋转函数transform Rotate 来实现 transform的RotateAround vector3 postion vector3 axis float angle 函数 J
  • vad算法 c语言,腾讯视频cKey算法

    接口地址 https vd l qq com proxyhttp 接口参数示例 buid vinfoad adparam pf in ad type LD KB PVL pf ex pc url https v qq com x cover
  • python语言基本控制结构程序异常_Python学习笔记整理(十七)异常处理

    一 异常基础 try except 捕捉由代码中的异常并恢复 匹配except里面的错误 并自行except中定义的代码 后继续执行程序 发生异常后 由except捕捉到异常后 不会中断程序 继续执行try语句后面的程序 try final
  • spark高级数据分析系列之第三章音乐推荐和 Audioscrobbler 数据集

    3 1数据集和整体思路 数据集 本章实现的是歌曲推荐 使用的是ALS算法 ALS是spark mllib中唯一的推荐算法 因为只有ALS算法可以进行并行运算 使用数据集在这里 里面包含该三个文件 表一 user artist data tx
  • Basic Level 1017 A除以B (20分)

    题目 本题要求计算 A B A B A B 其中 A A A是不超过1000位的正整数
  • RabbitMQ高级特性-Confirm确认消息

    Confirm确认消息 消息的确认 是指生产者投递消息后 如果Broker收到消息 则会给我们产生一个应答 生产者进行接收应答 用来确定这条消息是否正常发送到Broker 这种方式也是消息的可靠性投递的核心保障 如何实现Confirm确认消
  • 实战二十二:pytorch transformer 时间序列预测 多变量输入 单变量输出 完整代码数据 可直接运行

    代码演示视频 完整代码 pip install openpyxl i https pypi tuna tsinghua edu cn simple pip install optuna i https pypi tuna tsinghua
  • 电脑端teams一直在线小程序,简单好用易上手

    居家办公的你 会不会想要摸鱼 会不会想要下楼拿快递 会不会想要出去下馆子 然而 teams的5分钟不操作电脑状态就变为离开大大的阻挡了你幸福生活的脚步 不用担心 我来帮助你 只要用了这个脚本 24小时在线都没问题 老板看了直呼靠谱 心动不如
  • Java SpringBoot Spring Cloud 文件上传下载(图片文档上传下载) 以及上传下载文件大小限制.java

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 使用步骤 1 addpicture MultipartFile file 方法 2 download String fileName HttpServle
  • 软考-架构篇-软件架构风格

    概述 软件架构风格分类 数据流风格 批处理序列 管道 过滤器 对比 调用 返回风格 主程序 子程序 面向对象风格 层次结构风格 独立构件风格 虚拟机风格 仓库风格 概述 软件架构设计的一个核心问题是 能否使用重复的软件架构模式 即能否达到架
  • ubuntu16.04升级cmake

    好文章值得分享 https zhuanlan zhihu com p 93480024
  • Vue Cli 4x 新建初始化项目

    vue cli 最新版本已经出到 4 5 8 了 以往的一些配置 命令可能都不一样了 最新的vue 项目创建不是以往的 vue init webpack 这样很可能会一直卡死 所以多看官方文档是很重要的 那么我们废话不多说 开始教大家新建项
  • 业务系统故障率居高不下:有哪些非常有效的治理大招?

    一分钟精华速览 聊稳定性治理的文章很多 但面对系统的 各类疾病 到底该从哪里着手才能立竿见影 怎么才能 药到病除 相信在看这个问题时 大家会抱着 能不能学两招回去用 的心态阅读 TakinTalks论道系列 第3期 我们采访了4位资深从业人
  • A Magic Lamp 【HDU - 3183】【线段树区间最小值】

    题目链接 简单而言 这道题就是RMQ问题 但是我个人更喜欢用线段树来写区间最大值 因为这样子会好更新些 奈何这道题不需要更新 我们要从长度为N的字符串中删除M个元素 那么岂不是只剩下 N M 个字符串的长度 所以 我们不妨来找 N M 的长
  • C++预处理详解

    本文在参考ISO IEC 14882 2003和cppreference com的C Preprocessor的基础上 对C 预处理做一个全面的总结讲解 如果没有特殊说明 所列内容均依据C 98标准 而非特定平台相关 如VC 的 C 11新

随机推荐

  • 求两条轨迹间的hausdorff距离_轨迹数据压缩的DouglasPeucker算法

    点击蓝字关注我们 交通数据中会有很多的轨迹数据 轨迹数据一般是按秒采集 所以轨迹数据的量都是很大的 但是在进行数据分析时 轨迹数据量太大会影响运算效率 而且很多轨迹点是没有必要分析的 所以需要对数据进行压缩 轨迹数据压缩技术的主要目标是在不
  • open-api 算法实现

    要求 推荐在openEuler中实现 参考https www cnblogs com rocedu p 6012545 html第三节 提交相关代码码云 或github 链接 我使用博客园 提交不少于6张编译测试过程截图 至少包含SM4 S
  • 在C++中子类继承和调用父类的构造函数方法

    构造方法用来初始化类的对象 与父类的其它成员不同 它不能被子类继承 子类可以继承父类所有的成员变量和成员方法 但不继承父类的构造方法 因此 在创建子类对象时 为了初始化从父类继承来的数据成员 系统需要调用其父类的构造方法 如果没有显式的构造
  • 架构知识体系

    架构安全 对已知问题有有效的解决方案 对未知 潜在问题建立发现和防御机制 对于安全问题 首先要提高安全意识 建立一个安全的有效机制 从政策层面 组织层面进行保障 比如服务器密码不能泄露 密码每月更新 并且三次内不能重复 每周安全扫描等 以制
  • Gradle Springboot Web热部署的设置

    前言 在我们平时开发当中 需要实时的要查看我们的编码效果 这个时候如果我们设置了热部署 就免去了我们频繁的重启本地项目 热部署我们需要用到spring boot devtools这个组件 这里我们采用的gradle来管理项目 所以采用的ma
  • LeetCode 226. 翻转二叉树

    题目链接 https leetcode cn com problems invert binary tree 先序遍历 Java 代码 class Solution public TreeNode invertTree TreeNode r
  • 我的世界ess服务器信息,我的世界ess指令怎么用 ess指令大全及用法详解

    我的世界ess指令都有哪些 作为风靡全球的沙盒游戏 我的世界带给玩家太多的乐趣 为了能更方便的游戏 ess指令能帮助我们更好的游戏 很多新手玩家刚接触就被搞晕了 这么多的指令看起来有些复杂 下面就由小编给大家带来 我的世界ess指令都有哪些
  • mybatis进行批量插入 返回批量插入主键ID 插入不成功等问题

    这篇博文讲的是批量插入的例子 dao层框架用的mybatis 最一开始我的批量插入其实是个伪批量 是类似吧很多条insert into语句 直接拼成一条 然后直接运行 发现这样的效率真的是十分低 我做测试时285条数据 插入一次需要10S多
  • uniapp添加.gitignore以及不生效解决办法

    一 第一次新建 gitignore 首先进入项目 命令行新建 gitignore文件 touch gitignore 然后编辑器打开 进入到项目中新建的 gitignore 文件 复制粘贴以下 node modules project un
  • C++实现鼠标点击其他程序

    1 主要是SendInput函数 代码如下 初始化 INPUT input 0 input type INPUT MOUSE dx dy代表的是进行点击的坐标 下面显示的是 950 150 input mi dx static cast
  • 【Proteus仿真】555组成的多谐振荡器电路

    Proteus仿真 555组成的多谐振荡器电路 Proteus仿真演示 多谐振荡器电路 多谐振荡器电路是一种矩形波产生电路 属于数字电路 三极管不工作在放大线性区 这种电路不需要外加触发信号便能连续地 周期性地自行产生矩形脉冲 该脉冲是由基
  • Stable Diffusion:ChatGPT与AI绘画,引领艺术的未来

    人工智能 AI 的快速发展正在为各个领域带来革命性的变化 其中包括艺术与创意领域 AI绘画是一种将人工智能技术与艺术创作相结合的新兴范式 通过深度学习和生成对抗网络 GAN 等技术 AI绘画可以生成各种富有创意和想象力的艺术作品 本文将探讨
  • python - __str__ 和 __repr__

    内建函数str 和repr representation 表达 表示 或反引号操作符 可以方便地以字符串的方式获取对象的内容 类型 数值属性等信息 str 函数得到的字符串可读性好 故被print调用 而repr 函数得到的字符串通常可以用
  • Docker+docker-compose+nginx部署已有项目

    项目背景 在异地服务器拷docker相关项目到新的服务器 具体操作 1 新服务器安装好docker 2 新服务器安装好docker compose 3 从老服务器拷贝镜像到新服务器 4 新服务器导入镜像 5 构建项目地址挂载目录 找到doc
  • 用U盘作启动盘装Windows10系统整套流程 纯净版(不用其他乱七八糟的软件)(macOS适用)

    简介 本人的电脑是MacBook Air 2014年版的 因为内存小而且文件杂乱 所以一下子都给格式化了 但是要用Mac自带的恢复系统的话需要连接校园网 连接校园网又需要打开网页输入账号和密码 我们学校的校园网是这样的 所以只能用U盘作为格
  • gqrx编译过程记录

    gqrx编译过程记录 目标 环境 编译 下载源代码 建立编译位置 修改CMakefile txt中的模块 编译安装 运行界面 没有更多 目标 在ubuntun 20 04桌面版编译gqrx 通过USRP 205mini实现收音机功能 环境
  • 【解决】docker容器怎么使用宿主机的IPv6地址

    在IPv4时代 我们对外访问都是端口映射 都没有公网IP 但是在IPv6时大家都有公网IP 可能需要容器地址和主机地址一致 可以在docker run时使用参数 network host 则此容器网络和宿主机一致 docker run ne
  • AQS详解

    AQS详解 文章目录 AQS详解 AQS简单介绍 AQS原理 AQS原理概览 AQS对资源的共享方式 AQS定义两种资源共享方式 Exclusive 独占 Share 共享 AQS底层使用了模板方法模式 Semaphore 信号量 Coun
  • 浅谈可重入锁

    一 可重入锁 递归锁 1 概念 同一个线程在外层方法获取锁的时候 再进入该线程的内层方法会自动获取锁 前提是 锁对象是同一个对象 不是因为之前已经获取过还没有释放而阻塞 2 java中的ReentrantLock和synchronied都是
  • 关于Gdi+和GdiplusStartup

    GDI 实际上是一组类的定义 封装了gdi 的几乎所有API 当然使用方法就要从这些 例子 里边寻找了 本文正是尝试用GDI 写一个纯SDK的程序 语言自然是我最喜欢的语言WIN32ASM 这个程序很简单 就是用GDI 画了一条直线 算是抛