// KeyRing.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include // MFC OLE automation classes #include "KeyRing.h" #include "MainFrm.h" #include "KeyObjs.h" #include "KRDoc.h" #include "KRView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CKeyRingDoc* g_pDocument; // remote machine specified in the command line CString g_szRemoteCommand; #define CMD_SEPS _T("/ ") #define CMD_REMOTE _T("remote:") ///////////////////////////////////////////////////////////////////////////// // CKeyRingApp BEGIN_MESSAGE_MAP(CKeyRingApp, CWinApp) //{{AFX_MSG_MAP(CKeyRingApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CKeyRingApp construction CKeyRingApp::CKeyRingApp(): m_fInitialized( FALSE ) { } ///////////////////////////////////////////////////////////////////////////// // The one and only CKeyRingApp object CKeyRingApp theApp; int CKeyRingApp::ExitInstance() { CoUninitialize(); return CWinApp::ExitInstance(); } ///////////////////////////////////////////////////////////////////////////// // CKeyRingApp initialization //---------------------------------------------------------------------- BOOL CKeyRingApp::DealWithParameters() { BOOL fAnswer = FALSE; CString sz = m_lpCmdLine; sz.TrimRight(); // the first one is easy. If there is no command line, invoke the UI and leave if ( sz.IsEmpty() ) return FALSE; // copy the command line into a buffer TCHAR buff[MAX_PATH]; strcpy( buff, sz ); // just so we don't do it in the loop, initialize the open: string // length variable WORD cchConnect = strlen( CMD_REMOTE ); // parse out the arguments PCHAR pTok; pTok = strtok( buff, CMD_SEPS ); while ( pTok ) { // look for the connect: command if ( _strnicmp(pTok, CMD_REMOTE, cchConnect) == 0 ) { // just put the command parameter in a string g_szRemoteCommand = pTok; g_szRemoteCommand = g_szRemoteCommand.Right( g_szRemoteCommand.GetLength() - cchConnect ); } // Get next token pTok = strtok( NULL, CMD_SEPS ); } return fAnswer; } //---------------------------------------------------------------------- BOOL CKeyRingApp::InitInstance() { BOOL f; HRESULT hRes = CoInitialize(NULL); AfxEnableControlContainer(); if ( hRes == S_OK ) f = TRUE; // check for remote specifications on the command line DealWithParameters(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CKeyRingDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CKeyRingView)); AddDocTemplate(pDocTemplate); // save the command line for later use CString szCmdLine = m_lpCmdLine; /* // kill the command line now that we have caputured it. If we don't do this // then MFC takes a stab at "opening" the file that is named. Duh. We aren't // trying to open a file. We want to connect to that machine. m_lpCmdLine[0] = 0; */ // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // finally, we need to redirect the winhelp file location to something more desirable CString sz; CString szHelpPath; sz.LoadString( IDS_HELPLOC_KEYRINGHELP ); // expand the path ExpandEnvironmentStrings( sz, // pointer to string with environment variables szHelpPath.GetBuffer(MAX_PATH + 1), // pointer to string with expanded environment variables MAX_PATH // maximum characters in expanded string ); szHelpPath.ReleaseBuffer(); // free the existing path, and copy in the new one free((void*)m_pszHelpFilePath); m_pszHelpFilePath = _tcsdup(szHelpPath); return TRUE; } //---------------------------------------------------------------------- // App command to run the dialog void CKeyRingApp::OnAppAbout() { // load the about strings CString szAbout1; CString szAbout2; szAbout1.LoadString(IDS_ABOUT_MAIN); szAbout2.LoadString(IDS_ABOUT_SECONDARY); // run the shell about dialog ShellAbout( AfxGetMainWnd()->GetSafeHwnd(), szAbout1,szAbout2, LoadIcon(IDR_MAINFRAME) ); } ///////////////////////////////////////////////////////////////////////////// // CKeyRingApp commands BOOL CKeyRingApp::OnIdle(LONG lCount) { Sleep(1000); // the first time we get here, initialize the remote machines if ( !m_fInitialized ) { // we are initializing here because it can take some time // and we want the main window to be showing ASSERT( g_pDocument ); g_pDocument->Initialize(); // set the flag so we don't do this again m_fInitialized = TRUE; } return CWinApp::OnIdle(lCount); }