绝想首页

孙鑫 VC++学习笔记 (11)图形的保存和重绘

韩铮shady [苦涩] 2013-02-28 23:27:44 星期四 晴天 查看:184 回复:0 发消息给作者



重绘:当窗口状态发生变化,会发送WM_PAINT消息,该消息清除窗口内容并进行重绘。重绘时会调用OnDraw函数,可以先保存已绘制的图像然后在OnDraw函数中重新绘制图像。


创建新的类,并用新类的对象来存储每次绘制的图形,存储数据结构使用
集合类:CPtrArray通常使用的方法有Add,GetAt,GetSize
在OnDraw函数中将集合类中存储的图形对象取出,并进行重绘
注意:局部对象在所在函数返回时会发生析构,即生命周期结束
解决方法:用new为对象在堆中建立内存,并把地址传给对象的指针。堆中的内存如不显示调用delete清除则与程序的生命周期相同。


通过消息及所有非GDI函数得到的坐标点为设备坐标
关于坐标的转换可以查看本课的PPT和MSDN


滚动条
以CScrollView作为基类
在窗口创建后调用CScrollView::SetScrollSizes来设置滚动窗口的尺寸
OnInitialUpdate是窗口创建后第一个调用的函数,它的调用还在OnDraw之前


CDC提供了SetViewportOrg和SetWindowOrg两个成员函数来改变视口和窗口的原点
设备原点始终在客户区的左上角
OnPrepareDC会随时调整视口的原点


使用元文件CMetaFIleDC:
To implement a Windows metafile, first create a CMetaFileDC object. Invoke the CMetaFileDC constructor, then call the Create member function, which creates a Windows metafile device context and attaches it to the CMetaFileDC object.


Next send the CMetaFileDC object the sequence of CDC GDI commands that you intend for it to replay. Only those GDI commands that create output, such as MoveTo and LineTo, can be used.


After you have sent the desired commands to the metafile, call the Close member function, which closes the metafile device contexts and returns a metafile handle. Then dispose of the CMetaFileDC object.


CopyMetaFile复制指定元文件到文件
使用GetEnhMetaFile打开元文件
使用成员函数Close关闭元文件可以获得元文件的句柄
使用PlayMetaFile来显示指定句柄的元文件


使用兼容DC:
可以使用CreateCompatibleBitmap创建兼容位图保存绘制的图像
显示部分与上节课相似
注意SelectObject只是选择了位图的位图信息头,还必须使用BitBLe复制颜色表和像素数据块到兼容设备描述表


 


本章内容比较无聊(个人感觉),课程附带的PPT里面有详细的内容,比如坐标变换公式之类。。。有兴趣就看一下。。。反正估计很难用到,马上就到网络编程的内容了,期待

顶一下(33 写日记 1164306 224336
分享排行

 

 

留住已经逝去的峥嵘岁月 记住曾经绽现的万种风情 在记忆即将淡漠的时候 来把这些重新回味

Copyright (C) 2008-2014 www.juexiang.com, All Rights Reserved.

京ICP备2023001011号-3   京公网安备11010802011908号

客服QQ 1017160561 违法和不良信息举报电话 13148464312 邮箱 1017160561@qq.com