ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
第八章 图形软件开发 第一节 CMemDC封装类 第二节 图像透明技术 第三节 动画技术 第四节 透明动画 第五节 不规则窗口 第六节 双缓冲防闪烁技术 第七节 图层软件架构 第八节 CDC类成员函数介绍 一、变量的生命期: 1、临时变量:生命期最短。例如:int i;//访问速度最快 2、全局变量:生命期最长。例如:CPoint g_pos; 3、类成员变量:类成员变量的生命期与对象相同。在构造函数内初始化 例如:int m_nIndex;类成员变量访问速度比全局变量和静态变量还慢 二、闪烁问题:界面更新时有超过1次以上的输出,并且多次输出的区域有重叠 1、重叠面积越大闪烁越严重 2、输出的次数越多闪烁越严重 三、解决闪烁问题的关键,就是禁止在界面更新中多次画面输出。具体办法可以归纳为以下几种: a)非客户区和客户区不能同步更新画面造成的闪烁,可以去掉窗口的标题和边框。只在WM_PAINT消息回调时绘画,而在WM_NCPAINT消息回调中不绘画。例如:QQ、360等软件皆是如此; b)客户区内背景和前景不能同步更新画面,在WM_ERASEBKGND背景更新和WM_PAINT前景更新两个消息中,只选择一种消息回调时绘画而在外一个消息回调时不绘画; c)Invalidate强制更新客户区函数,代入FALSE只更新前景而不更新背景,可以减少客户区闪烁。或者说代入FALSE只通知WM_PAINT消息回调,而不通知WM_ERASEBKGND消息回调; d)即使只在客户区中输出画面,如果画面输出的背景图和角色图形太多,还会发生背景图和角色之相互覆盖造成画面闪烁。解决这个问题的方法必须使用“双缓冲防闪烁”技术 四、MFC数据集合类: 1、CList:双向链表 2、CArray:动态数组 3、CMap:数据映射类(哈希表) 4、CString:串 五、STL标准数据集合类(标准模板库) 1、std::list:双向(环形)链表 2、std::vect:动态数组 3、std::map:映射类(二叉树) 4、std::string:串