GDI的一个问题

hezex 2020-04-11 05:47:35
我想描一个点,又不想用SetPixel,只好用Fillrect,可是我不想用GDI,但是他又非要有一个画刷,所以谁能告诉我,不用CreateSolidBrush,怎么获取画刷句柄(也不能用GDI)?或者谁能告诉我CreateSolidBrush它的源代码?目前我已经找到了一个方向,画刷句柄好像是指向一个LOGBRUSH的结构体,请问怎么直接让HBRUSH指向这个结构体?或者绑定函数的源代码,谢谢各位!
...全文
177 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
_mervyn 2020-04-15
  • 打赏
  • 举报
回复
引用 5 楼 贺zx 的回复:
那请问您知道怎么破解它吗?
我不知道。 如果你觉得你决定的这个方向是你当前解决问题最好的方向。你毅然决定做非正规军,那我可以想到一些这个方向上可能要解决的问题,你可以参考: 1、你代码对windows版本的兼容性如何保证?你就算放弃xp win7,你如何保证win10它一个小更新,你的代码还能正常工作? 2、要彻底解决1,必须使用windows官方文档化的接口,那么你就需要通过逆向或者学习,完全了解gdi其内部原理,然后,恰好,gdi内部确实依赖了windows的其他官方文档化的接口。然后自己重新实现。否则你就很可能得为每个版本甚至每个小版本的windows写"外挂"。 我实在是难以想象,你为什么不想用gdi,你到底要做什么。是什么样的难度值得你去这样搞? 祝你成功。
hezex 2020-04-15
  • 打赏
  • 举报
回复
引用 4 楼 _mervyn的回复:
我不知道你为什么会有不想用这,不想用那的想法。不管怎么样我猜你是在使用这些api的时候遇到了问题。但是你解决问题的思路真是别具一格呀,我先假设你是想做windows上的产品,我试着按你的思路去解决问题: 1、windows的gdi接口太难用了,或者说用不了。于是你不想用。意思是你想自己与显卡驱动去打交道?抱歉,你还是离不开windows的接口,你需要使用windows提供的“与驱动打交道”的应用层接口,并且你得非常了解微软规定的驱动规范。除此之外,你得非常了解如何将应用层想要的效果转换成显卡需要的数据和命令。 2、真糟糕,1看上去很难,于是你不想用“与显卡驱动打交道”的接口了?你想自己写windows平台的驱动?抱歉,你还是离不开windows的接口,你需要使用windows提供的内核态接口,驱动开发包。而且还是不能避免去了解显卡是如何工作的,需要怎样的数据和命令。 3、不行,windows太难用了,于是你不想用windows了,你想自己写一个操作系统。自己定义你这个操作系统上应用程序如何和硬件交互。那么现在你终于只剩下一个问题没有解决了:还是不太了解显卡要怎样的数据和命令才能显示出你想要的效果。 4、你尝试去了解现有的规范,发现不行,太复杂太难用了。你决定自己定义规范,显卡厂商必须按你的规范来。 5、哈哈哈,你终于解决了所有问题,结果发现你找不到能用的显卡。更别谈你的操作系统了。 我从第2步开始就想错了吗?你只是想逆向一下windows的gdi库?自己照着它的汇编去实现一下? 相信我,这难度不亚于第1步,还不如去学习为了完成第1步所需的知识。 当然,以上都是开玩笑的,我之所以这么说,是觉得你的方向或者说可能你的理解就有问题。你可能都不明白你的程序是如何显示出界面的。所以我觉得也许通过这种方式,能让你有一些思考。 你想在windows上进行图形开发,就离不开 gdi 或 dx(windows上才有),或者跨平台的图形库规范opengl(windows也支持),不管是什么,这些都只是API,只是规范。应用层只是调用了一下API,API的具体实现,不同平台肯定不一样,拿windows来说,你调用了一个API,windows拿到你的数据,进行一系列计算处理,再通过显卡驱动与显卡进行通信,显卡拿到数据和命令,进行最终显示(通过HDMI、DP等协议与显示器交互,我们只需要拿对应的线将显卡和显示器连上就完事了)。 当然,也许你是真的大佬。不管你多厉害,只要你的程序还依赖windows运行,你要么破解它,要么老实遵守它的规范。就像你用c++开发需要符合c++语法和标准,你用汇编也得符合汇编语法,甚至你只需要敲敲01机器码就能写程序,那你也得知道你用的cpu、gpu架构。总之,你不可能脱离平台开发。除非你自己创造一个平台,那就全都是你说了算了。
那请问您知道怎么破解它吗?
hezex 2020-04-15
  • 打赏
  • 举报
回复
引用 8 楼 _mervyn的回复:
[quote=引用 7 楼 贺zx 的回复:] 大神,关于gdi的文档我找了很久,请问能给我提拱几个关键字吗?不尽感激!
去msdn上查阅啊 https://docs.microsoft.com/zh-cn/windows/apps/ 应用平台和框架一栏下面有关于win32 API的全部说明。你可以点击 API 参考(按功能) 也就是跳转到下面这个链接: https://docs.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list 这个链接最下面的Deprecated or legacy APIs分类,也就是已经过时弃用的api里有关于gdi的所有接口 你可以点击Graphics Device Interface (GDI): Use Direct2D instead.(微软已经推荐使用D2D代替了) 进入到: https://docs.microsoft.com/zh-cn/windows/win32/gdi/windows-gdi?redirectedfrom=MSDN 这个链接就包含了所有关于gdi了。 附上其他相关链接,其实你自己也能从官网跳转 gdi+: https://docs.microsoft.com/zh-cn/windows/win32/gdiplus/-gdiplus-class-gdi-reference?redirectedfrom=MSDN D2D: https://docs.microsoft.com/zh-cn/windows/win32/direct2d/reference?redirectedfrom=MSDN DX: https://docs.microsoft.com/zh-cn/windows/win32/directx-sdk--august-2009-?redirectedfrom=MSDN 关于如何查阅自己想要的东西,拿你的brush来说: 关于brush的所有api(从gdi介绍界面In this section一栏下面-->Brushes-->进入到Brushes相关界面-->Brush Reference-->Brush Functions): https://docs.microsoft.com/zh-cn/windows/win32/gdi/brush-functions CreateSolidBrush API介绍: https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createsolidbrush 每一个api页面,都会详细介绍每个参数,返回值,注意事项,以及依赖(包括从哪个版本windows开始,需要包含哪个.h 需要链接哪个.lib),还有与其相关的其他API 如果你用vs进行开发,直接在API上按f1 就能跳转到相应的api官方介绍页面了。 [/quote] 太谢谢了
_mervyn 2020-04-15
  • 打赏
  • 举报
回复
引用 7 楼 贺zx 的回复:
大神,关于gdi的文档我找了很久,请问能给我提拱几个关键字吗?不尽感激!
去msdn上查阅啊 https://docs.microsoft.com/zh-cn/windows/apps/ 应用平台和框架一栏下面有关于win32 API的全部说明。你可以点击 API 参考(按功能) 也就是跳转到下面这个链接: https://docs.microsoft.com/zh-cn/windows/win32/apiindex/windows-api-list 这个链接最下面的Deprecated or legacy APIs分类,也就是已经过时弃用的api里有关于gdi的所有接口 你可以点击Graphics Device Interface (GDI): Use Direct2D instead.(微软已经推荐使用D2D代替了) 进入到: https://docs.microsoft.com/zh-cn/windows/win32/gdi/windows-gdi?redirectedfrom=MSDN 这个链接就包含了所有关于gdi了。 附上其他相关链接,其实你自己也能从官网跳转 gdi+: https://docs.microsoft.com/zh-cn/windows/win32/gdiplus/-gdiplus-class-gdi-reference?redirectedfrom=MSDN D2D: https://docs.microsoft.com/zh-cn/windows/win32/direct2d/reference?redirectedfrom=MSDN DX: https://docs.microsoft.com/zh-cn/windows/win32/directx-sdk--august-2009-?redirectedfrom=MSDN 关于如何查阅自己想要的东西,拿你的brush来说: 关于brush的所有api(从gdi介绍界面In this section一栏下面-->Brushes-->进入到Brushes相关界面-->Brush Reference-->Brush Functions): https://docs.microsoft.com/zh-cn/windows/win32/gdi/brush-functions CreateSolidBrush API介绍: https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createsolidbrush 每一个api页面,都会详细介绍每个参数,返回值,注意事项,以及依赖(包括从哪个版本windows开始,需要包含哪个.h 需要链接哪个.lib),还有与其相关的其他API 如果你用vs进行开发,直接在API上按f1 就能跳转到相应的api官方介绍页面了。
hezex 2020-04-15
  • 打赏
  • 举报
回复
引用 6 楼 _mervyn的回复:
[quote=引用 5 楼 贺zx 的回复:] 那请问您知道怎么破解它吗?
我不知道。 如果你觉得你决定的这个方向是你当前解决问题最好的方向。你毅然决定做非正规军,那我可以想到一些这个方向上可能要解决的问题,你可以参考: 1、你代码对windows版本的兼容性如何保证?你就算放弃xp win7,你如何保证win10它一个小更新,你的代码还能正常工作? 2、要彻底解决1,必须使用windows官方文档化的接口,那么你就需要通过逆向或者学习,完全了解gdi其内部原理,然后,恰好,gdi内部确实依赖了windows的其他官方文档化的接口。然后自己重新实现。否则你就很可能得为每个版本甚至每个小版本的windows写"外挂"。 我实在是难以想象,你为什么不想用gdi,你到底要做什么。是什么样的难度值得你去这样搞? 祝你成功。[/quote] 大神,关于gdi的文档我找了很久,请问能给我提拱几个关键字吗?不尽感激!
_mervyn 2020-04-14
  • 打赏
  • 举报
回复
我不知道你为什么会有不想用这,不想用那的想法。不管怎么样我猜你是在使用这些api的时候遇到了问题。但是你解决问题的思路真是别具一格呀,我先假设你是想做windows上的产品,我试着按你的思路去解决问题: 1、windows的gdi接口太难用了,或者说用不了。于是你不想用。意思是你想自己与显卡驱动去打交道?抱歉,你还是离不开windows的接口,你需要使用windows提供的“与驱动打交道”的应用层接口,并且你得非常了解微软规定的驱动规范。除此之外,你得非常了解如何将应用层想要的效果转换成显卡需要的数据和命令。 2、真糟糕,1看上去很难,于是你不想用“与显卡驱动打交道”的接口了?你想自己写windows平台的驱动?抱歉,你还是离不开windows的接口,你需要使用windows提供的内核态接口,驱动开发包。而且还是不能避免去了解显卡是如何工作的,需要怎样的数据和命令。 3、不行,windows太难用了,于是你不想用windows了,你想自己写一个操作系统。自己定义你这个操作系统上应用程序如何和硬件交互。那么现在你终于只剩下一个问题没有解决了:还是不太了解显卡要怎样的数据和命令才能显示出你想要的效果。 4、你尝试去了解现有的规范,发现不行,太复杂太难用了。你决定自己定义规范,显卡厂商必须按你的规范来。 5、哈哈哈,你终于解决了所有问题,结果发现你找不到能用的显卡。更别谈你的操作系统了。 我从第2步开始就想错了吗?你只是想逆向一下windows的gdi库?自己照着它的汇编去实现一下? 相信我,这难度不亚于第1步,还不如去学习为了完成第1步所需的知识。 当然,以上都是开玩笑的,我之所以这么说,是觉得你的方向或者说可能你的理解就有问题。你可能都不明白你的程序是如何显示出界面的。所以我觉得也许通过这种方式,能让你有一些思考。 你想在windows上进行图形开发,就离不开 gdi 或 dx(windows上才有),或者跨平台的图形库规范opengl(windows也支持),不管是什么,这些都只是API,只是规范。应用层只是调用了一下API,API的具体实现,不同平台肯定不一样,拿windows来说,你调用了一个API,windows拿到你的数据,进行一系列计算处理,再通过显卡驱动与显卡进行通信,显卡拿到数据和命令,进行最终显示(通过HDMI、DP等协议与显示器交互,我们只需要拿对应的线将显卡和显示器连上就完事了)。 当然,也许你是真的大佬。不管你多厉害,只要你的程序还依赖windows运行,你要么破解它,要么老实遵守它的规范。就像你用c++开发需要符合c++语法和标准,你用汇编也得符合汇编语法,甚至你只需要敲敲01机器码就能写程序,那你也得知道你用的cpu、gpu架构。总之,你不可能脱离平台开发。除非你自己创造一个平台,那就全都是你说了算了。
hezex 2020-04-14
  • 打赏
  • 举报
回复
有人吗
hezex 2020-04-11
  • 打赏
  • 举报
回复
啊,有人吗,
hezex 2020-04-11
  • 打赏
  • 举报
回复
有人吗,在线等!

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧