好吧,不能再拖了,爲了逼自己儘快搞定呢MFC,決定邊看<<深入淺出MFC>>邊記筆記,用最快的速度搞定它以便開始進行後續的開發。
第一章: win32基礎
該章節一上來先講win32應用程序設計,筆者認爲這是MFC的基礎,趕緊打開VS2008創建一個win32項目,果然比控制檯程序多了許多文件,看了下主cpp框架代碼,該框架生成一個默認的窗口程序。程序進入winmain後首先創建一個WNDCLASSEX類,設置其各項屬性並調用RegisterClassEx註冊該窗口類。然後調用CreateWindow創建主窗口,最後進入主消息循環代碼如下:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);//轉化鼠標鍵盤消息
DispatchMessage(&msg);//將消息傳遞給主窗口處理程序WndProc相應消息
}
}
在資源視圖中可以添加自己的對話框,菜單等並在WndProc寫代碼處理他們的消息。
窗口程序的生命週期:
產生上面已經講了,只說關閉。當點擊關閉窗口時候,系統送出VM_close命令,應用程序不攔截該命令,交給default:DefWindowProc處理。DefWindowProc收到VM_CLOSE後調用destroywindow把窗口清除,同時送出WM_DESTROY,應用程序收到後調用PostQuitMessage結束消息循環 此時窗口程序才全部清理完畢。
空閒時間:
getmessage和peekmessage不同,peekmessage在消息隊列沒有消息後仍然收回控制權,使程序得以執行一段時間。
控制檯程序也可以調用MFC類庫(必須與GUI無關的) 如CFILE 和CSTRING類,必須包含頭文件afx.h 編譯選項必須選擇C的多線程函數庫
本章最後提到了多線程,正好複習下內核驅動課程中的東西:三種創建線程的區別
- CreateThread:是Windows的API函數(SDK函數的標準形式,直截了當的創建方式,任何場合都可以使用),提供操作系統級別的創建線程的操作,且僅限於工作者線程。不調用MFC和RTL的函數時,可以用CreateThread,其它情況不要使用。因爲:
- _beginthreadex:MS對C Runtime庫的擴展SDK函數,首先針對C Runtime庫做了一些初始化的工作,以保證C Runtime庫工作正常。然後,調用CreateThread真正創建線程。
- AfxBeginThread:MFC中線程創建的MFC函數,首先創建了相應的CWinThread對象,然後調用CWinThread::CreateThread,在CWinThread::CreateThread中,完成了對線程對象的初始化工作,然後,調用_beginthreadex(AfxBeginThread相比較更爲安全)創建線程。它讓線程能夠響應消息,可用於界面線程,也可以用於工作者線程。
第二章:c++特性
看到內容我嚇一跳,要不要正麼巧啊,剛系統的學了下C++這就來給我複習了,不禁要爲我的學習計劃小小的得意一下~~。
大概翻了一下沒有什麼新東西 直接跳過了
第三章:
簡單的跟寫了下作者的RTTI機制,作者在每個類中加了個靜態類型成員 並把它放入全局鏈表中用以識別父子關係,真實C++RTTI則是維護了一棵繼承樹。
這章看完後對MFC的實現細節有了直觀的影響。後面的章節感覺有點亂,直接開始跟代碼得了