MFC 運行過程(摘錄)

來源:互聯網
上載者:User
MFC 運行過程(摘錄)
程式的誕生
*Application object 產生,記憶體於是獲得配置,初值亦設立了

*AfxWinMain 執行AfxWinInit,後者又調用AfxInitThread,把訊息佇列盡量加大到96

*AfxWinMain 執行InitApplication。這是CWinApp 的虛函數,但我們通常不改寫它

*AfxWinMain 執行InitInstance。這是CWinApp 的虛函數,我們必須改寫它

*CMyWinApp::InitInstance 'new' 了一個CMyFrameWnd 對象

*CMyFrameWnd 建構函式調用Create,產生主視窗。我們在Create參數中指定的視窗類別是NULL,於是MFC 根據視窗種類,自行為我們註冊一個名為"AfxFrameOrView42d" 的視窗類別

*回到 InitInstance 中繼續執行 ShowWindow,顯示視窗

*執行 UpdateWindow,於是發出WM_PAINT

*回到AfxWinMain,執行Run, 進入訊息迴圈

程式開始運行
*程式獲得WM_PAINT訊息(藉由CWinApp::Run中的::GetMessage迴圈)

*WM_PAINT經由::DispatchMessage 送到視窗函數CWnd::DefWindowProc中

*CWnd::DefWindowProc將訊息傳遞過訊息映射表格(Message Map)

*傳遞過程中發現有相符項目,於是調用項目中對應的函數.此函數時應用程式利用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP
之間的宏設立起來的

*標準訊息的處理常式亦有標準命名,例如WM_PAINT必然由OnPaint處理

程式的結束
*使用者單擊 File/Close 發出WN_CLOSE

*CMyFrameWnd 並沒有設定WM_CLOSE處理常式,於是交給預設的處理常式

*預設函數對於WN_CLOSE的處理方式是調用::DestroyWindow,並因而發出WM_DESTROY

*預設的WN_DESTROY處理方式是調用::PostQuitMessage,因此發出WM_QUIT

*CWinApp::Run收到WM_QUIT後會結束其內部之訊息迴圈,然後調用ExitInstance,這是CWinApp的一個虛擬函數

*如果CMyWinApp改寫了ExitInstance,那麼CWinApp::Run所調用的就是CMyWinApp::ExitInstance,否則就是CWinApp::ExitInstance

*最後回到AfxWinMain,執行AfxWinTerm,結束程式 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.