Visual_C++MFC之Lesson11
在本节"Visual C++ MFC之Lesson11"中,主要探讨了MFC应用程序中图形的保存和重绘问题,以及Windows图形处理中的坐标空间和转换机制。我们来看一下如何解决图形对象在内存管理上的问题。 在事件处理函数`OnLButtonUp`中,原先创建`CGraph`对象时,直接在栈上分配内存,当函数返回时,这个对象会被自动销毁,导致内存回收。为了解决这个问题,我们可以将`CGraph`对象改为在堆上分配内存,通过指针存储。具体操作如下: 1. 定义一个`CGraph`类型的指针`pGraph`。 2. 使用`new`运算符在堆上创建`CGraph`对象,并将指针指向它。 3. 将`pGraph`添加到`CPtrArray`容器`m_ptrArray`中。 这样,即使`OnLButtonUp`函数执行完毕,`CGraph`对象也不会立即被销毁,因为它现在由`m_ptrArray`管理,直到数组不再引用它时,通过`delete`操作符手动释放。 接下来,我们转向Windows图形处理的基础概念——坐标空间。Windows API提供了四种不同的坐标空间: 1. **世界坐标系空间**:这是逻辑上的坐标系统,用于定义图形的原始形状和位置,可以进行旋转、缩放等操作。 2. **页面空间**:与世界坐标系空间类似,但可以适应不同输出目标的大小和比例,如不同尺寸的打印机页面。 3. **设备空间**:与实际物理设备关联,比如屏幕或打印机,单位通常与物理设备的像素或点相对应。 4. **物理设备空间**:更具体地指代应用程序窗口的客户区,或者打印机的纸张大小。 在这些坐标空间之间进行转换是通过Windows API的转换功能实现的,例如`SetWorldTransform`函数。转换的过程是将一个矩形区域从一个坐标空间复制或映射到另一个坐标空间,这涉及到物体大小、方向和形状的改变。转换不仅作用于整个对象,也影响对象内的每一个点。 转换过程中,从世界坐标系空间到页面空间的转换由应用程序控制,而页面空间到设备空间的转换是Windows API的一部分,会根据目标设备的特性自动进行调整。这样的转换机制使得应用程序能够独立于特定输出设备创建图形,保证在各种设备上都能得到合适的显示效果。 本节课的重点在于理解MFC中图形对象的生命周期管理和Windows图形系统的坐标空间转换,这对于开发能够正确保存和重绘图形的MFC应用程序至关重要。
- 粉丝: 2
- 资源: 142
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助