三個 SDK 函式:
WinExec:最簡單,兩參數 (路徑、顯示方式)。但若以 SW_SHOWMAXIMIZED 啟動無最大化按鈕程式 (如計算機),視窗不正常顯示,僅在工作列出現。ShellExecute:較靈活,可指定工作目錄、動作 (open/print 等)。CreateProcess:最複雜 (10 參數),多數可傳 NULL,但能控制安全屬性、繼承、優先權等細節。原則:靈活性與簡單性成反比,視需求選擇。
WM_LBUTTONDOWN 處理器,子視圖卻不觸發?檢查子視圖類別的 BEGIN_MESSAGE_MAP 基底類別參數是否正確 (ClassWizard 易生成錯誤基底類別)。若手寫訊息映射,確認類別名、父類別名、參數無誤,const 修飾詞錯誤也會導致映射失效。
GetModuleFileName(NULL, buffer, MAX_PATH) 取得完整執行檔路徑,字串操作移除檔名即為目錄。常用目錄 API:
GetWindowsDirectoryGetSystemDirectoryGetTempPathGetCurrentDirectory關鍵 API:SystemParametersInfo。第一參數 uiAction 決定操作類別,如 SPI_GETICONTITLELOGFONT (圖示標題字型)、SPI_SETDESKWALLPAPER (桌面壁紙)。
若僅需螢幕解析度,直接用 GetSystemMetrics (SM_CXSCREEN, SM_CYSCREEN)。
核心思路:向主視窗發送 WM_CLOSE。取得主視窗句柄用 AfxGetMainWnd(),呼叫 PostMessage(WM_CLOSE) 或 SendMessage(WM_CLOSE),框架會自動呼叫 OnClose 提示存檔。
避免 用 FindWindow 找標題,因標題常動態變更導致失效。
若需阻止使用者關機時強制結束,在主框架類別處理 WM_QUERYENDSESSION 並回傳 FALSE。
必須用 Debug 功能表的 Go (F5) 執行,而非 Project → Execute。程式結束時輸出視窗會報告洩漏。若無輸出,嘗試執行 VC++ 程式群組中的 MFCTracer 工具啟用追蹤後再執行程式。