有时间,有心情,还可能学有所用,终于有机会学习《深入浅出MFC》,
从网上了解有人推荐先看李久进著《MFC深入浅出》,完全是扯淡!那本书晦涩难懂,对MFC初学者一点用处没有。
虽然不会从事MFC开发,但C++开发应在工作范围之内,学习本书,这此总结,以备查阅:
1. 对Windows消息机制的理解更加系统;
2. 理解MFC巧妙的宏运用;
3. 搞清楚线程持有消息队列,而非窗口,窗口持有创建线程;
4. XWindow和Windows有类似的消息机制;
5. 窗口关闭操作->DestroyWindow销毁win窗口资源->OnNcDestroy->PostNcDestroy->delete this
delete CButton->按钮析构->Destroywindow销毁win按钮资源
6. 生命周期:
shell -> 加载exe -> startup代码 -> new WinApp() -> AfxWinMain() + AfxGetApp() -> 进程+主线程(线程消息队列)
-> CWinApp::InitApplication() = new CDocManager -> CWinApp::InitInstance() -> new CFramWnd()+CWnd::Create()
-> RegWinClass + RegWinProc=DefWindowProc -> API:CreateWindow() -> WM_Create -> CWin::OnCreate() -> ShowWindow UpdateWindow
-> 入队消息 PostMsg to System Msg Queue -> PostMsg to Thead(theWnd) Msg Queue -> CWinApp::Run()=Thread::GetMsg()+DispatchMsg()
[-> 非入队消息(窗口内操作) SendMsg to Current Wnd ]
-> AfxWndProc(pWnd=CWnd:FromHandlePermanent(hWnd)) -> CWnd::WindowProc()
-> CWnd::OnWndMsg() + DefWindowProc() -> 路由MsgMap = OnWndMsg+OnCmdMsg+OnNotifyMsg
-> wm_close -> destroywindow -> wm_destroy -> PostQuitMsg -> wm_quit -> msg while end -> ExitInstance