看了孙鑫老师的书后,顺便对已绘制的图形具有保持功能作一下总结。总的来说,有三种方法可以图形具体保持功能。分别如下:
- 在每次绘制图形后,用一个对象数组来保存已经绘制的样式以及图形坐标 。只在在窗体重绘时重新来绘制这些保存的图形数据即可。
- 采用元数据文件,它采用了元数据文件设备上下文来保存已绘制的图形,每次窗体重绘时再播放元数据文件来实现图形保持功能。
- 这种方法采用一个兼容DC,它利用一个兼容位图(相当于一块画布),用户在所有绘制图形操作都在这一块画布上进行,这块画布同时也保存了用户的所有绘制操作,当窗体时行重绘时,当前窗口重绘DC把已绘制好图形的画布直接拷贝到当前DC中,这样就达到了图形保持功能。
分别就这三情况,我给出了参考代码,以后仅作笔记使用。
第一种最普通的方法:
这是一种常规做法,代码量比其它二种要稍多一些。其它二种方法,另写二篇吧!算凑个数吧,嘻嘻!
有关坐标点的转换问题,其实很简单,不用想得太复杂,其实就是二种坐标点的转换问题,逻辑点转换为设备点以及设备点转换为逻辑点,平时我们用到的绘图函数用到的坐标都是逻辑点。如果要输出到设备上(显示器,打印机)都得转换为设备点。设备点的原点永远都是客户区的(0,0)坐标点。我们只需要根据公式做映射即OK了。其实MFC已经帮我们做好了映射了,每次在响应WM_PAINT的事件中,都会去调用 OnPrepareDC(CDC* dc)方法 , 在这个方法中,就做了转换坐标的方法。
多看看MFC的代码,一切原理都会变得不是那么神秘!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述