219 lines
6 KiB
C++
219 lines
6 KiB
C++
|
// KeyRing.cpp : Defines the class behaviors for the application.
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include <afxdisp.h> // 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);
|
||
|
}
|
||
|
|