初学GDI绘图之心得
来源:互联网 发布:淘宝产品改动价格 编辑:程序博客网 时间:2024/06/09 23:04
1.GDI绘图提供了逻辑绘图设备与物理输出设备的分离。
2.设备上下文,这个概念从字面上有点难以理解,其实它是一个windows数据结构,MFC把包装成了CDC对象,设备上下文提供了应用程序的绘图的环境,也是应用程序的绘图输出设备,我个人是这么理解的:设备上下文在MFC中就是CDC对象,CDC就是一个很厉害的纸,这个纸可以对应你窗口的客户区,也能是你看不见的内存。
3.API可以用HDC,在MFC中都是用CDC以及CDC的派生类。API函数CreateDC与DeleteDC对应,API函数GetDC与ReleaseDC对应,API函数Attach与Detach对应,别搞混了。其实细细理解还是很容易就能记住它的用法的,你创建了,当然要删除;你获得了,当然要释放;你将一个CDC对象与一个设备句柄关联,当然要分离。学习GDI一定要把API函数和MFC类中的函数分清,往往MFC的同名函数要比API省事。
4.API函数GetWindowDC可以在整个窗口包括非客户区绘图。
5.为了简化与窗口相关的两种设备上下文的获取和释放,MFC提供了CClientDC和CWindowDC两个CDC的子类。
6.在第二点里面已经提到设备上下文了,最好理解的就是把它当作纸,而客户区就是这个纸,不过还有一种是内存设备上下文,它是一块内存区域,当内存设备上下文最初被创建时,它可以说就是一张空白的纸,只有将于一个CBitmap选入该设备之后,才能实际绘制。首先要定义一个CDC对象,然后创建这个CDC对象,从这个已存在的对象,通过调用CreateCompatibleDC可以获得一个与之兼容的内存设备上下文对象。然后用CreateCompatibleBitmap创建一个位图对象,将它选入内存设备。好像有点晕是吧,我是这样理解的,我首先创建了一个CDC,这个CDC对象就是屏幕,我要把这个屏幕的图像存入内存中,首先我得为它分配一块内存区域,这还没完,我还得给这内存设备上下文指定我准备绘制的是什么东西没,把这些准备工作做完之后接着就是抓图与显示了。
7.GDI对象,就是画笔,画刷,字体位图等等。在MFC中要做的只是把GDI对象选入设备上下文,在用完后选出即可。
8.坐标变换,CDC对逻辑空间的坐标变换只提供了SetWindowOrg平移变换。对于仿射变换,我们需要自己通过写代码才能实现。
9.坐标映射,我们通过CDC::SetMapMode(int nMapMode)设置映射模式,坐标映射其实就是一个x或y逻辑单位相当于多少像素。关于CDC::DPtoLP(将设备坐标转化为逻辑坐标)和CDC::LPtoDP(将逻辑坐标转化为设备坐标)这两个函数,我是这样认为的:GDI绘图用的坐标都是逻辑坐标,而我们经常用GetClientRect,GetWindowRect,还有鼠标单击位置等获取一些坐标,而这些坐标是设备坐标,要想让GDI用,首先应转化为逻辑坐标.
10.绘制图形,比如画线,画弧线,多边形,贝济埃样条等,还有路径,填充,区域,这些要想好好掌握,应该多实践.
11.位图,通过CBitmap类和CImage类提供的方法可以很轻松的完成位图的创建,销毁,加载,保存,显示,裁减,缩放以及像素的变换等.
- 初学GDI绘图之心得
- GDI绘图之画图
- GDI 绘图之 BitBlt 用法
- GDI绘图之指针时钟
- GDI绘图之画刷
- GDI绘图之缩放成像
- GDI基础介绍之几何绘图
- C++/MFC-GDI绘图之CBrush画刷
- C++/MFC-GDI绘图之CBitmap位图
- GDI绘图
- gdi 绘图
- GDI绘图
- windows程序设计之绘图基础之GDI原理
- windows程序设计之绘图基础之GDI函数调用
- windows程序设计之绘图基础之GDI映射模式
- GDI+绘图技术应用之图形的保存和打印
- 多线程绘图之:Multiple Threads and GDI Objects
- (C#)GDI+绘图之鼠标移动画图
- 怎样使得互联网的资源进行一次更好的聚合
- 关于 ZeroC ICE 的不成熟思考
- window.js
- 将人类历史融入互联网
- 我的电脑 默认打开文件夹
- 初学GDI绘图之心得
- 公交车上:小朋友心中的教师节
- C++中的虚函数
- ASP.Net控件模板中根据绑定对象的属性控制元素隐现技巧
- 常用正则表达式大全
- 转别人说是一个很老的文章:一个程序员的奋斗历程
- oracle 锁机制
- SQLite简介
- mySQL