BOOL CMyApp::InitInstance() {
Enable3dControls();
LoadStdProfileSettings();
AddDocTemplate(...);
// ...
m_pMainWnd->ShowWindow(...);
m_pMainWnd->DragAcceptFiles();
EnableShellOpen();
RegisterShellFileTypes(TRUE);
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
return TRUE;
}
Enable3dControls():啟用 3D 控制項外觀(若已設定則 SetDialogBkColor() 可省略)。SetRegistryKey():指定登錄機碼路徑,取代傳統 INI 檔儲存設定。自動從登錄或 INI 讀取最近開啟的檔案清單,並在功能表 ID_FILE_MRU_FILE* 位置動態建立選項。內部機制:建立 CRecentFileList 物件 → 讀取登錄/INI → 功能表建立時自動插入項目。
讓主視窗接收 WM_DROPFILES 訊息。框架類 CFrameWnd::OnDropFiles 會遍歷拖入的檔案路徑,呼叫 OpenDocumentFile 逐一開啟。
EnableShellOpen():註冊應用程式的原子名稱 (GlobalAddAtom),準備接受 Shell 開啟/列印命令。RegisterShellFileTypes():將所有文件模板的類型、Shell 命令(open、print、printto)寫入登錄,建立檔案關聯。核心由 CDocManager::RegisterShellFileTypes 實作。CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo); // 解析 __argc/__targv 填充 cmdInfo
if (!ProcessShellCommand(cmdInfo)) return FALSE;
ParseCommandLine 會識別參數前綴 - 或 /,並呼叫 cmdInfo.ParseParam。命令列語意:
app (新建) | app filename (開啟) | app /p filename (列印) | app /pt filename printer driver port (指定列印)。
InitInstance 串聯了 MFC 應用程式從啟動到進入訊息迴圈的完整初始化鏈路:環境配置 → 文件模板註冊 → 殼層整合 → 命令列解析 → 文件/視圖建立。掌握各步驟的內部機制,有助於進行深度客製化與疑難排解。