MFC的学习笔记(一)

来源:互联网 发布:php7不支持mysql 编辑:程序博客网 时间:2024/05/20 07:17

看视频的一些学习笔记,谢谢指正错误
1. 句柄,handle代表资源的标识,根据不同资源具有不同的句柄名称

2. 用一个整数表示message,但微软使用一个宏来定义消息,以WM开头

3. WinMain函数是函数的入口,进入WinMain函数之后,我们要设计窗口,注册窗口,产生窗口,显示窗口,重画窗口,消息循环,将消息路由到消息队列中,过程函数,这是总线

4. LP开头的类型为长指针类型,LPSTR指向字符串的唱指针类型

5. ~取反之后再&与,可以消除原有的某种属性

6. 窗口过程函数,也称回调函数,即当我们收到一条消息的时候系统会调用一个API函数去处理它,但是该函数需要我们写明如何处理该消息,代码放在窗口过程函数。

7. 汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好。

8. 当设计完成一个窗口之后,需要向操作系统申请才能去创建,创建窗口需要定义窗口句柄,使用句柄来创建窗口对象,创建的窗口一定要基于已经注册的窗口

9. 当有多个窗口的时候,需要设定父窗口

10. 创建窗口之后,记得显示窗口,显示后还需要更新(刷新)一次

11. GetStockObject函数可以返回画刷,画笔等

12. translateMessage(&msg)可以将消息队列中的WM_KEYDOWNWM_KEYUP消息转换为WM_KEYCHAR,再投递到消息队列中,这样可以让我们更为便捷的了解到用户的按下键,不会改变原有消息,只会产生一个新的消息

13. dispatchMessage(&msg)将消息分发出去,操作系统给回调函数

14. WindowPro窗口回调函数,窗口过程函数,每次有新的消息产生都会调用窗口过程函数,所以在其中最好写明各消息的响应,switch/case

15. hDC(Handle to Device Context)是图像的设备描述表,窗口显示上下文句柄,其中可以进行图形显示。利用hDC=GetDC(hWnd),可以获得一个窗口的图形设备描述表。可以通过ReleaseDC()函数释放。为了满足在不同的机器上都能显示,则选择获取当前机器的一个图像设备表

16. 当WM_PAINT消息处理时,对窗口进行重画,需要一个BeginPaint来返回一个hDC,最后和EndPaint结束,这两个函数只能用于响应WM_PAINT消息,当需要一直显示某信息时,应在重画函数里显示。

17. 响应WM_CLOSE消息时,可以使用DestroyWindow(hwnd)销毁窗口,但是,调用DestroyWindow函数时,它会产生新的消息WM_DESTROY,所以需要再处理WM_DESTROY消息,DestroyWindow函数执行完之后就会销毁窗口,但是,如果没有选择退出则其还在后台运行,即只是销毁窗口。所以应在响应WM_CLOSE消息时进行判断用户是否需要退出,而不应该在WM_DESTROY消息时判断

18. PostQuitMessage函数用于投递一个WM_QUIT消息到消息队列中,正好与GetMessage函数相匹配,当GetMessage函数从消息队列中取到WM_QUIT消息返回0,其他则非零。

19. 注意使用DefWindowProc进行缺省的消息处理,让系统进行对于不感兴趣的消息进行处理,在写消息循环的时候default语句是必不可少的

20. cin,cout,cerr分别对应着stdin,stdout,stderr,能够自动识别所要处理的数据类型,从而进行处理

21. 在C++中结构体和类可以通用,结构体是一种特殊的类,二者区别于访问控制,public,protected,private,protected多用于子类与父类之间,struct定义时,缺省情况下都是public,而class定义时,缺省情况下都是private

22. 面向对象与面向过程,其中,我开车,面向对象就会把开车作为车的一个成员方法,而面向过程则会将车作为参数传递给开车的方法

23. 在类中可以使用构造函数进行初始化,构造函数不需要返回值,其定义是使用类名来定义,构造函数更为重要的作用是创建对象本身,对象的产生需要一定的内存空间,而内存空间的分配就是构造函数来完成的,所以C++规定,每个类都要有构造函数,如果没有,则C++会提供一个默认的构造函数

24. 析构函数,用于释放当对象生命周期结束时,构造函数所分配的空间,这两个函数都是系统调用的,析构函数没有返回值,并且不能带有参数,一个类只能有一个析构函数

25. 函数的重载,当遇见同名函数重载时,编译器会根据传递的参数来匹配你所调用的那个函数,只有返回值不同的两个函数不能构成函数重载;当函数参数存在默认值或者缺省值的时候也是不能构成函数重载,需要参数类型或者个数的不同才能重载