1.Windows程序的运行本质:基于消息,事件驱动(Message Based,Event Driven).
2.程序调用GetMessage API循环获取消息,程序的生命靠它来推动.
MSG msg;
while (GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
3.WinMain 的四个参数由操作系统传递进来.
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
4.TranslateMessage 是为了将键盘消息转化,DispatchMessage 会将消息传给窗口函数去处 理.DispatchMessage 经过USER 模块的协助,才把消息交到窗口函数.
5.Call back 函数,意思是指[在你的程序中,被Windows系统调用]的函数。这些函数虽然由你设计,但是永远不会也不该被你调用,它们是为Windows系统准备的.
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
6.WndPro函数的Switch的default必须调用:DefWindowProc,这是Windows内部预设的消息处理函数.
7.Message Map:消息或系统命令在列表中绑定通用格式的函数(函数指针),在WndPro中对消息或系统命令对比,调用相应的绑定函数.
8.Modal对话框的激活与结束,靠的是DialogBox和EndDialog两个API函数.处理过消息之后,应该传回TRUE;如果未处理消息,则应该传回FALSE.
9.执行线程的结束有两种情况,一种是寿终正寝(ExitThread),一种是未得善终(TerminateThread).
10.执行线程的优先权范围从0(最低)到31(最高).
11.由行为决定设计,怎么用从而怎么达到目的的设计结构.
12.[对象,封装,类][继承,衍生,子类继承父类所有的成员变量和函数][虚函数代表衍生,继承函数接口,变异函数内容]
13.调用父类别的函数,你必须使用scope resolution operator(::)明确指出.
14.(虚函数除外)调用到哪个函数,必须视指针的原始类型而定,与指针实际所指之对象无关.
15.如果你预期衍生类别有可能重新定义某一个成员函数,那么你就在基础类别中把此函数设为virtual.
16.相同的指令却唤起了不同的函数,这种性质称为Polymorphism(多态).Polymorphism的目的,就是要让处理[基础类别之对象]的程序代码,能够完全透通地继续适当处理[衍生类别之对象].
17.纯虚拟函数不需定义其实际动作,它的存在只是为了在衍生类别中被重新定义,只是为了提供一个多态接口.
18.虚拟函数衍生下去仍为虚拟函数,而且可以省略virtual 关键词.
19.静态Static成员变量在类外初始化,独立于对象之外.static 成员函数[没有this 参数]的这种性质,不需要借助任何对象,就可以被调用执行.
20.C++的template有两种,一种针对function,另一种针对class.
21.在程序的任何地方放置TRACE宏,例如:TRACE("Hello World");
22.CObject是万类之首,凡类别衍生自CObject者,得以继承数个对象导向重要性质.
23.AfxOutputDebugString 将字符串输往Debug调试器.
24.CWinApp代表程序本体.CFrameWnd代表一个主框窗口(Frame Window).
25.要把某个函数用作callback 函数,就必须告诉C++ 编译器,不要放this指针作为该函数的最后一个参数。两个方法可以做到这一点:1. 不要使用类别的成员函数(也就是说,要使用全域函数)做为callback 函数。2. 使用static 成员函数。也就是在函数前面加上static修饰词。
26.凡声明为static 的东西(不管函数或变量)都并不和对象结合在一起,它们是类别的一部份,不属于对象。
27.有关文件读写的动作在CDocument 的Serialize 函数进行,有关画面显示的动作在CView 的OnDraw或OnPaint 函数进行。
28.任何一个类别只要在声明时使用DECLARE_DYNAMIC或DECLARE_DYNCREATE 或DECLARE_SERIAL宏,就会拥有一个静态的(static)CRuntimeClass 内嵌对象。
29.执行线程函数的执行期,也就是该执行线程的生命期。