wordpress站點版權設置拉新推廣賺錢的app
我是荔園微風,作為一名在IT界整整25年的老兵,今天我們來重新審視一下Visual Studio 2022下開發(fā)工具的MFC框架知識。?
大家還記得創(chuàng)建Win32應用程序是怎么弄的嗎?
Win32應用程序的建立到運行是有一個個關系分明的步驟的:
1.進入WinMain函數(shù)
2.設計窗口類
3.注冊窗口類
4.產生窗口
5.顯示窗口
6.更新窗口
7.進入消息循環(huán)
8.將消息送給窗口過程函數(shù)去處理
遵循這一個個步驟,我們就可按步驟寫程序了。
但在編寫MFC程序時,我們找不到這樣一條主線,甚至在程序中找不到 WinMain函數(shù)。可以在當前項目中查找 WinMain函數(shù),方法是在 Visual Studio 2022開發(fā)環(huán)境中單擊【編輯】菜單,選擇【查找和替換】→【快速查找】菜單項,在彈出的“查找和替換對話框”中“查找內容”文本框內輸入WinMain,“查找范圍”設置為“整個解決方案”。結果你會發(fā)現(xiàn)你搜索不到WinMain函數(shù)。不僅如此,你也無法找到WNDCLASS、CreateWindow等。那么是不是MFC程序就不需要WinMain函數(shù)、設計窗口類,也不需要創(chuàng)建窗口了呢?
當然不是。
這其實是因為微軟在MFC的底層框架類中封裝了這些每一個窗口應用程序都需要的步驟和函數(shù),目的主要是為了簡化程序員的開發(fā)工作。
但這也給我們在理解MFC程序時造成了不解。
為了更好地學習和掌握基于MFC的程序,有必要對 MFC的運行機制及封裝原理有所了解。我們知道,?WinMain 函數(shù)是所有 Win32 程序的入口函數(shù),就像C/C++程序下的 main 函數(shù)一樣。我們創(chuàng)建的這個 MFC 程序也不例外,它也有一個 WinMain 函數(shù),但這個WinMain 函數(shù)是在程序編譯鏈接時由鏈接器將該函數(shù)鏈接到項目程序中的。
參考我之前說的?Visual Studio 2022安裝帖子,一般我是將 Visual Studio 2022安裝到了D:\Program Files (x86)下。
在安裝目錄下,微軟提供了部分MFC的源代碼,我們可以跟蹤這些源代碼,來找出程序運行的整條順序線。我機器上 MFC 源代碼的具體路徑為 D:\Program Files(x86) Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.16.27023\atlmfc\src\mfc。
你會問我怎么知道是這個路徑。
其實很簡單。
1.點擊你電腦左下角Windows圖標,在“所有程序”中找到,找到Visual Studio 2022后,右鍵打開菜單,點擊“更多”下的“打開文件所在的位置”。
2.打開文件夾后找到“Visual Studio 2022”的快捷方式所在路徑。
3.選中這個快捷方式,右鍵打開菜單,然后選擇“屬性”。
4.點擊“快捷方式”標簽頁,接著點擊“打開文件所在的位置”,就可以找到Visual Studio 2022的安裝路徑。
大家可以根據(jù)這個目錄結構在自己機器上查找相應的目錄,該目錄層級結構太復雜,大家可以在安裝目錄下搜索關鍵字“*.cpp”來找到源碼所在的目錄。在找到相應的目錄后,在資源瀏覽器的“高級選項”下選中“文件內容”,然后在搜索框中輸入“WinMain”,按下鍵盤上的回車鍵。
實際上,WinMain函數(shù)在 appmodul.cpp這個文件中。保持對應項目的打開狀態(tài),然后雙擊 appmodul.cpp 即可在 Visual Studio 2022環(huán)境中打開該文件,在其中可以找到如下所示的這段代碼。
extern "C" int WINAPI_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,_In_ LPTSTR lpCmdLine, int nCmdShow)#pragma warning(suppress: 4985){// call shared/exported WinMainreturn AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);}
原來WinMain 函數(shù)在這里啊。現(xiàn)在我們可以看看項目程序是否會進入這個 WinMain函數(shù)。在 WinMain 函數(shù)中按下 F9鍵設置一個斷點,然后按下F5鍵調試運行當前程序。我們發(fā)現(xiàn)程序確實運行到該斷點處停了下來。這說明項目這個MFC程序確實有WinMain 函數(shù),在程序編譯鏈接時, WinMain函數(shù)就成為該程序的一部分。但這個_ tWinMain函數(shù)和Win32里所涉及的Winmain函數(shù)有些不同,實際上?_tWinMain是系統(tǒng)定義的一個宏,程序編譯時就會替換為WinMain了。
作者簡介:荔園微風,1981年生,高級工程師,浙大工學碩士,軟件工程項目主管,做過程序員、軟件設計師、系統(tǒng)架構師,早期的Windows程序員,Visual Studio忠實用戶,C/C++使用者,是一位在計算機界學習、拼搏、奮斗了25年的老將,經歷了UNIX時代、桌面WIN32時代、Web應用時代、云計算時代、手機安卓時代、大數(shù)據(jù)時代、ICT時代、AI深度學習時代、智能機器時代,我不知道未來還會有什么時代,只記得這一路走來,充滿著艱辛與收獲,愿同大家一起走下去,充滿希望的走下去。