// This hack is necessary because the menu ID is a member of the class. // MFC message maps need the IDs to be global. BOOL CDocTemplateEx::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // determine the message number and code (packed into nCode) UINT nMsg = 0; int nCod = nCode; if (nCod != CN_UPDATE_COMMAND_UI) { nMsg = HIWORD(nCod); nCod = LOWORD(nCod); } // for backward compatibility HIWORD(nCode)==0 is WM_COMMAND if (nMsg == 0) nMsg = WM_COMMAND; if ((nCod==CN_UPDATE_COMMAND_UI) && (nID>=m_nMenuId) && (nID<=m_nMenuId+MRU_RANGE)) { BOOL bResult = TRUE; // default is ok ASSERT(pExtra != NULL); CCmdUI* pCmdUI = (CCmdUI*)pExtra; ASSERT(!pCmdUI->m_bContinueRouting); // idle - not set OnUpdateRecentFileMenu(pCmdUI); bResult = !pCmdUI->m_bContinueRouting; pCmdUI->m_bContinueRouting = FALSE; // go back to idle return bResult; } if ((nMsg==WM_COMMAND) && (nCod==CN_COMMAND) && (nID>=m_nMenuId) && (nID<=m_nMenuId+MRU_RANGE)) { #ifdef _DEBUG if (afxTraceFlags & traceCmdRouting) { TRACE2("SENDING command id 0x%04X to %hs target.\n", nID, GetRuntimeClass()->m_lpszClassName); } #endif //_DEBUG return OnOpenRecentFile(nID); } return CMultiDocTemplate::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); }
BOOL CBibedtApp::InitInstance() { // Standardinitialisierung // Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen // ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden // spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen. InitCommonControls(); #ifdef _AFXDLL Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen #else Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen #endif // Ändern des Registrierungsschlüssels, unter dem unsere Einstellungen gespeichert sind. SetRegistryKey(AfxLoadString(IDS_STRING_REGKEY)); LoadStdProfileSettings(); // Standard INI-Dateioptionen laden (einschließlich MRU) m_Language.LoadLanguages(); m_Options = new COptions(); m_Options->Load(); m_Coding = new CCodingTeX(); m_Coding->m_Enabled = m_Options->m_TranslateASCII; m_Coding->m_Filename = m_Options->m_EncodingTeX; m_Coding->m_Res = _T("TEX"); m_Coding->Load(); m_BibDef = new CBibDef(); CScintillaWnd::LoadScintillaDll(); m_pDocManager = new CDocManagerEx; // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen // dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CBibedtDoc), RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster RUNTIME_CLASS(CBibedtView)); AddDocTemplate(pDocTemplate); // Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Verteilung der in der Befehlszeile angegebenen Befehle if (!ProcessShellCommand(cmdInfo)) return FALSE; // Register Bib Clipboard format m_BibClipbrdFormat = RegisterClipboardFormat(CF_BIB); // Register RTF Clipboard format m_RtfClipbrdFormat = RegisterClipboardFormat(CF_RTF); m_HtmlClipbrdFormat = RegisterClipboardFormat(CF_HTML); // Shell EnableShellOpen(); #ifndef _DEBUG RegisterShellFileTypes(TRUE); #endif m_pMainWnd->DragAcceptFiles(); // Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden. m_pMainWnd->ShowWindow(m_Options->m_WindowPlacement.showCmd); m_pMainWnd->UpdateWindow(); if (m_Options->m_OpenLastFile && cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew && (UINT)m_pRecentFileList->GetSize() > 0) { // Open last file at start CString fn = m_pRecentFileList->m_arrNames[0]; CFileFind ff; if (ff.FindFile(fn)) { OnOpenRecentFile(ID_FILE_MRU_FILE1); } else { // Does not exist //m_pRecentFileList->Remove(0); } ff.Close(); } return TRUE; }