程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 應用程序的退出

應用程序的退出

編輯:關於C語言

 

一個Windows應用程序啟動之後,一般是進入消息循環,等待或者處理用戶的輸入,直到用戶關閉應用程序窗口,退出應用程序為止。

例如,用戶按主窗口的關閉按鈕,或者選擇執行系統菜單“關閉”,或者從“文件”菜單選擇執行“退出”,都會導致主窗口被關閉。

當用戶從“文件”菜單選擇執行“退出”時,將發送MFC標准命令消息ID_APP_EXIT。MFC實現了函數CWinApp::OnAppExit()來完成對該命令消息的缺省處理。

void CWinApp::OnAppExit()

{

// same as double-clicking on main window close box

ASSERT(m_pMainWnd != NULL);

m_pMainWnd->SendMessage(WM_CLOSE);

}

可以看出,其實現是向主窗口發送WM_CLOSE消息。主窗口處理完WM_CLOSE消息之後,關閉窗口,發送WM_QUIT消息,退出消息循環(見圖5-3),進而退出整個應用程序。

邊框窗口對WM_CLOSE的處理

MFC提供了函數CFrameWnd::OnClose來處理各類邊框窗口的關閉:不僅包括SDI的邊框窗口(從CFrameWnd派生),而且包括MDI的主邊框窗口(從CMDIFrameWnd派生)或者文檔邊框窗口(從CMDIChildWnd派生)的關閉。

該函數的原型如下,流程如圖6-1所示:

void CFrameWnd::OnClose()

從圖6-1中可以看出,它首先判斷是否可以關閉窗口(m_lpfnCloseProc是函數指針類型的成員變量,用於打印預覽等情況下),然後,根據具體情況進行處理:

如果是主窗口被關閉,則關閉程序的所有文檔,銷毀所有窗口,退出程序;

如果不是主窗口被關閉,則是文檔邊框窗口被關閉,又分兩種情況:若該窗口所顯示的文檔被且僅被該窗口顯示,則關閉文檔和文檔窗口並銷毀窗口;若該窗口顯示的文檔還被其他文檔邊框窗口所顯示,則僅僅關閉和銷毀文檔窗口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved