今天课上学习了MFC上的图形框架,理解了windows是如何完成几何作图,和完成相关图形属性。首先介绍的当然是显示图形的显示器,在MFC中一切基于图形窗口的东西都是绘制出来的,绘制的方式有点阵与矢量两种,在点阵中主要靠点亮相关各自独立的像素点,而矢量中的每个点都是一个对象,每个矢量可以是一个单独的像素点也可以是连续的直线。当分别用两种方式对图片进行放大时区别就出来了,点阵中的放大是放大相关像素点的个数,由于每个点的储存都是离散的就会产生马赛克,但是当你在一定的距离下产生模糊视野的时候图像看上去也是“清晰的”(图像在未放大时清晰的原因是因为此时的图像是按照预先设置好的矩阵显示出来的,由于没有相关的矩阵放大信息就会导致放大模糊);矢量图则不然(必须由软件生成),显示的操作是在对象的层次上,可以同时利用多个像素点来构成矢量,并且储存了图像的分离图像,这样在对图像进行放大操作时只需根据分离图像就可以通过改变矢量重新绘制(图像不会因为放大而变形)。这是图像如何显示的,那么在MFC中,在windows中又是如何绘制图形的呢?显示某个事物无非包括两种,第一个是这个事物的形状似什么,和用什么来表现这个图形。例如我想在计算机上画一个圆,这样就涉及到一个画圆的几何函数,而用什么画圆,用多粗的线,什么颜色的线等一些非几何属性。在MFC中将图像分为两大块:其一是图像的几何外形(设备接口),其二是它的的非几何属性(设备接口环境)。在实际应用中接受图像信息的设备有很多种(显示器,打印机,U盘等,每个总类又有许多不同,例如显示器的尺寸,以及支持的色彩位数等),那么如何保证我的MFC的图像在各个设备上都能正常显示呢,当然通过接口技术来定义通用标准,那么谁来管理这些接口呢?在MFC中我们采用了GDI(图形设备接口),它是真正给设备画图的,那么我们只用把相关图像的几何外形和属性信息递交给GDI就可以在任意设备上显示了,这样就做到了设备无关性(解决泛型语言,软件与硬件的即插即用)。在MFC中通过调用GDI32.DLL(system.32)的动态函数库来绘制几何图形,通过对象来储存相关图像的属性,当需要修改某个属性的时候只需要选中欲采用的属性将旧的属性替换即可(注意替换使用完后须将旧的颜色再换回来);最后学习MFC中关于颜色的显示,采用RGB三基色组合,每个基色由一个字节储存,因此有0~255种。
讲点关于编程的常识:在C++中采用类名生成的对象与采用new生成对象是不同的,例如 Cpen pen,是在栈内存中创建的对象,其内存由编译器管理,程序员不用管。而采用Cpen * pen = new Cpen(),则是在堆内存中,由程序员自己管理,因此必须delete pen释放这块内存,否者会产生内存泄漏。