VC++杂七杂八的笔记(一)

Afx_msg并没有什么其他用途,它只是用来表明该原型说明是针对消息映射函数而言。

仅改变视窗成员变量OnDraw函数是不会被调用的(除非改变了视窗的大小)。必须调用InvalidateRect函数,它能触发Windows的WM_PAINT消息,该消息又在CView类被映射,以引起对OnDraw的调用。

OnDraw的参数名以注释的形式存在,所以在使用这个指针之前,必须解除这个名称的注释,或用自己的名称代替这个名称。

两种情况可优化Windows的绘制过程。第一,我们必须知道Windows只更新无效矩形内部的象素,所以设置的无效矩形区域越小,重画速度越快。第二,执行在无效矩形外面的绘制指令纯粹浪费时间,OnDraw函数可调用CDC的成员函数GetClipBox得到无效矩形的大小,这样在绘制时就可避免对其外面的对象的绘制。

Windows图形设备界面:实际上并没有把数据写到屏幕上。所有到显示屏的输出都是图形,不管它是直线、圆还是文本。GDI支持在对图形输出编程时不依赖于显示它的硬件。

设备上下文是一种Windows数据结构,它包含的信息允许Windows将输出请求转换成对正在使用的特定物理输出设备的动作。

默认情况下,在每种映射模式中,位于工作区左上角的点的坐标都是(0,0),也可把原点移到其他位置。设备坐标:象素作为绘图单位。设备环境用了默认映射模式MM_TEXT。

如果创建了一个CClientDC对象,则该设备环境的映射区域仅限于客户区域,用户不可能在区域之外绘图。如果创建的是CWindowDC,点(0,0)指的是整个屏幕的左上角,允许用户在显示器的任何地方绘图。视图窗口没有非客户区域,因此CWindowDC更适合于框架窗口,而不是视图窗口。CClientDC派生于CDC,在构造时调用GetDC函数,在析构时调用ReleaseDC函数。工具栏属于框架窗口的客户区。

Windows限制了可用的设备环境数目,如果设备环境对象没有被成功删除的话,程序退出前会有小部分内存丢失。

(1)在消息函数内部创建设备环境对象

最简单的方法是在堆栈中构造对象,它的析构函数在返回时被自动调用。

(2)通过调用CWnd的GetDC成员函数获得设备环境的指针,必须通过调用ReleaseDC函数来释放设备环境。

说明:千万不能删除作为参数以指针形式传递给OnDraw函数的CDC对象,应用程序框架会自动控制它的删除。

WM_CREATE消息

Windows发送给视图的第一个消息。当应用程序框架调用Create函数时该消息就会被发送,此时窗口创建还未完成,窗口还不可见,因此在控制函数OnCreate内部,不能调用那些依赖于窗口处于完全激活状态的Windows函数,可在被重载的OnInitialUpdate函数内调用这些函数。

WM_CLOSE消息

当用户从系统菜单中关闭窗口或父窗口被关闭时,Windows都会发送WM_CLOSE消息。如果在派生视图类中重新定义OnClose消息映射函数,就可完全控制关闭过程。只有在确认关闭窗口是非常安全的情况下,才可调用基类中的OnClose函数,由它来继续处理关闭过程。此时视图对象和相应的窗口仍然处于活动状态。

时间: 2024-11-05 09:54:46

VC++杂七杂八的笔记(一)的相关文章

VC++杂七杂八的笔记(三)

UpdateWindow函数通过发送一个WM_PAINT消息来刷新窗口,UpdateWindow将WM_PAINT消息直接发送给了窗口过程函数进行处理,而没有放到消息队列里. MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表.在消息映射表中,消息与对应的消息处理函数指针是成对出现的.某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中.当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就

VC++杂七杂八的笔记(二)

在Windows中,不仅用户程序可以调用系统的API函数,系统也会调用用户程序,这个调用是通过消息来进行的.wParam和lParam表示的信息随消息的不同而不同. 每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口消息. Windows程序中的消息分为进队消息和不进队消息.进队消息将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送.不进队消息在系统调用窗口过程时直接发送给窗口.不管进队消息还是不进队消息,最终都由系统调用窗口

一些关于VC++开发的笔记

通常程序卡住了,主要有双方面的可能: (1)死循环了 (2)死锁了 要确定是否是死循环.能够通过调试器(经常使用Windbg)查看线程执行时间,假设隔了一段会儿两次查看的执行时间有非常大区别,那么非常有可能是死循环了.反之,可能是死锁了.这时候能够看一下堆栈最上帧是不是在调用相似WaitForSingleObject或者WaitForMultiObject之类的函数.假设线程非常多,仅仅能逐步排查那些线程在等哪些锁. 关于容器的删除操作 vector,list,map都能够通过erase函数删除

【TPO】TPO做题笔记

还是把杂七杂八的笔记挪到这儿吧.2333 之前的做的太烂不记了 150411 TPO4 R12 L17 阅读:单词捉急->逻辑结构捉急,最后脑子里只有离散的片段,串不通全文 高中语文没学好的恶果2333 听力:有时候听力记笔记反而跟不上节奏,索性以后不做了 还有长时间的听力过程中容易走神,这个就太233了 150427 TPO5 R24 L 阅读:虽然生词还是好多但还好做的不瓤 [最后TOEFL阅读要能达到这个分我就满足了 事实证明逻辑结构很重要逻辑结构很重要逻辑结构很重要!!![尼玛比单词还重

C++ 学习资料搜寻与学习(第一期)(未完待续)

一.图形图像类 [Visual C++]vs2008/2005正确打开vs2010所创建项目的几种方法 jlins 2012-04-12 14:38 [Visual C++]关于无法打开包括文件:“StdAfx.h”或者意外结尾的错误解决方案 jlins 2012-04-11 21:10 [Visual C++]绘图函数BitBlt的使用方法 jlins 2012-04-10 18:11 [C++]关于随机函数与概率设置 jlins 2012-04-10 02:53 [Visual C++]CD

什么值得买:一家论坛式导购网站的自我修养

什么值得买 的用户把这个网站亲切称为"色魔张大妈"(SMZDM演化而来),虽然这个昵称有些恶搞的成分,但这是一家我印象中这个时代为数不多的"正常"公司.它没有颠覆什么,但重新定义了什么是"值",并且改变了一大批人的消费习惯. 在电商领域,什么值得买从创立初始就在节奏与气质上特立独行,包括其至今都没有涉及"交易"环节.电商行业里,如果一家公司不擅长赶政策热点.赶创业故事热潮,很难在资本市场为自己谈到一个好价钱,没钱烧就没有资源支

VC++编程之道读书笔记(2)

第三篇 技术细节 第七章:细说开发人员必知必会的39个开发细节 细节36:单例模式的应用 在开发程序时,往往需要在整个工程中只需要一个类的实例.而这个实例一旦被创建就不能被其他的实例再创建了,通常我们称这个实现过程为单例模式. 既然要保证类只有一个实例,那么就需要其他的类不能使用实例化该类.因此,需要将其构造方法设为私有的,即使用private关键字修饰.同时,类中提供一个静态方法,该方法的返回值是该类的一个实例.这样就只能使用该静态方法来获取类的实例了,从而保证了唯一性. 下面通过具体代码来实

VC++编程之道读书笔记

第二篇 缪误21:位图数据是按照红绿蓝顺序存储的 大家都知道位图的颜色是由红.绿.蓝三个分量构成的,但是位图颜色数据存储的方式则不是按照这个顺序存储的,而是按照蓝.绿.红的顺序存储的.并且对于真彩色位图来说,位图的颜色数据是倒序存储的,即位图的第一行数据位于位图数据的最底部. 第三篇 细节12 :内存中的数组 在C++中通过数组可以操作内存,创建数组时需要为数组分配内存空间,操作数组时就是对内存空间中的数组元素进行操作.数组创建后,数组引用和数组元素分别存储在栈内存和堆内存中,并通过数组引用与数

孙鑫VC++视频教程笔记

写在前面的话:在学习孙鑫老师的VC++视频时,为了加深自己对知识的深入理解,就做了下面的笔记. 第一讲: 第二讲: 第三讲: 第四讲: 第五讲: 第六讲: 第七讲: 第八讲: 第九讲: 第十讲: 第十一讲: 第十二讲: 第十三讲: 第十四讲: 第十五讲: 第十六讲: 第十七讲: 第十八讲: 第十九讲:动态链接库 第二十讲: 孙鑫VC++视频教程笔记,布布扣,bubuko.com