视频教程地址观看:http://pan.baidu.com/s/1mhKQ6kK
1、MFC六大关键技术
sad
a)MFC程序的初始化过程:
从CWinApp类派生一个应用程序类;
使用派生类定义的全局变量(theApp);
在预定义头文件“stdafx.h”中,禁用“windows.h”取而代之afx开头的MFC头文件;
编译设置中选择用“Use MFC in a Static Library”;
在CWinApp生类中,重写InitInstance函数作为程序启动代码。
b)消息映射:
DECLARE_MESSAGE_MAP 在头文件中声明了2个static成员变量和1个成员函数:
(重点是一个结构体数组:将一些消息和函数关联)
BEGIN_MESSAGE_MAP 在源文件中定义了2个static成员变量的初始化和一个函数的定义;
END_MESSAGE_MAP 在源文件中对结构体数组的定义的结尾语句
c)其他四个关键技术:运行时类型识别(RTTI)、动态创建、永久保存、和消息分发。
例如:设置窗口图标。
2、SendMessage和PostMessage函数都是消息传递函数,两个函数的格式:(面试题)
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
SendMessage和PostMessage这两个函数消息的区别是:
a)返回值类型不同:两个函数的4个参数的意义是一样的,只有返回值类型不同
(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),
LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是传递成功。
b)PostMessage 是异步的,SendMessage 是同步的。
PostMessage 只把消息放入窗口消息队列中,不管消息被处理后的结果就返回;
而SendMessage等待消息被处理完了之后才返回。
c)如果在同一个线程内,常常使用SendMessage发送消息时,速度快并能得到返回的消息处理结果。
在不同线程或者进程之间,一般使用PostMessage发送消息,把消息先放入目标窗口的消息队列中,
然后由目标窗口通过消息循环自行派发处理。
3、消息的种类:
a)系统消息:0-WM_USER之间的数字:
b)用户消息:大于WM_USER以上的数字(程序员)
c)用户消息主要用于在窗口之间进行数据传递;
4、CWinApp类的成员介绍:
a)m_pszAppName:从CWinApp构造函数送入,如果没有送入去找StringTable,如果还没有最后找执行文件名;
b)m_hInstance:所有资源的总管:任何资源视图中的资源实际上都是通过这个句柄获取到的。