📄 resorgaddinapp.cpp
字号:
/************************************************************************
*
* Resource ID Organiser Add-In for Visual C++ .NET
*
* (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
*
************************************************************************
*
* Description : CResOrgAddInApp - application class
*
* Compiler : Microsoft Visual C++ .NET 2003
*
* Target
* Environment : Windows 2000/XP
*
* NOTE:
*
* This software is provided "as is". All title and copyrights in and
* to the software, including but not limited to any images, text etc.
* etc. incorporated into it, are the property of Anna-Jayne Metcalfe
* and Riverblade Limited, except where acknowledged otherwise.
*
* Your may freely use this code in your own products, PROVIDED
* this notice is not removed or modified.
*
* Please visit http://www.riverblade.co.uk/products/resorg
* or email support@riverblade.co.uk for latest updates and product support
*
************************************************************************
*
* MODIFICATION HISTORY:
*
* This is a controlled document. See project configuration
* control tool for latest version and full version history.
*
* $Archive: /Projects/AddIns/ResOrg/ResOrgNETAddIn/ResOrgAddInApp.cpp $
* $Revision: 16 $
* $Date: 22/10/05 11:56 $
* $Author: Anna $
*
* $History: ResOrgAddInApp.cpp $
*
* ***************** Version 16 *****************
* User: Anna Date: 22/10/05 Time: 11:56
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Integrated ATL CMainToolWindowCtrl, which replaces the original MFC OLE
* Control [IMS ID 125]
*
* ***************** Version 15 *****************
* User: Anna Date: 13/10/05 Time: 12:59
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* CResOrgAddInApp::InitInstance() now sets the resource instance of
* _AtlModule. This is required to be able to access the satellite DLLs
* resources correctly.
*
* ***************** Version 14 *****************
* User: Anna Date: 30/12/04 Time: 21:03
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Corrected registry key initialisation
*
* ***************** Version 13 *****************
* User: Anna Date: 30/12/04 Time: 18:59
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Corrected the registry key name
*
* ***************** Version 12 *****************
* User: Anna Date: 28/12/04 Time: 9:27
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* 1. Only symbols display child frames now contain a splitter window
* 2. Corrected view class for HTML displays
* 3. Updated banner
*
* ***************** Version 11 *****************
* User: Anna Date: 13/12/04 Time: 4:11
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* 1. Changed company registry key to Riverblade
* 2. Updated file banners
*
* ***************** Version 10 *****************
* User: Anna Date: 21/08/04 Time: 18:58
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* The add-in now uses CResOrgMDIChildWnd for MDI child frames instead of
* CChildFrame (which has been deleted)
*
* ***************** Version 9 *****************
* User: Anna Date: 7/03/03 Time: 21:05
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* m_pMultiSymbolFileTemplate is now created correctly
*
* ***************** Version 8 *****************
* User: Anna Date: 15/02/03 Time: 21:00
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Moved a pile of code to a new base class - CResOrgCoreApp
*
* ***************** Version 7 *****************
* User: Anna Date: 25/11/02 Time: 15:27
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Changed website address in banner
*
* ***************** Version 6 *****************
* User: Anna Date: 22/10/02 Time: 14:15
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Changed name/email address (at last!)
*
* ***************** Version 5 *****************
* User: Andy Date: 6/08/02 Time: 10:35
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* CResOrgAddInApp::OnConnection() no longer takes the HWND of the Visual
* Studio main window (which we don't know yet anyway) as a parameter
*
* ***************** Version 4 *****************
* User: Andy Date: 1/08/02 Time: 16:44
* Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
* Further development of ResOrg.NET - particularly the tool window
*
* ***************** Version 3 *****************
* User: Andy Date: 12/06/02 Time: 23:00
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddInVc7
* CResOrgAddInApp::OnCmdAbout() now passes the module state of the add-in
* to the About Box so it will list it in the modules control
*
* ***************** Version 2 *****************
* User: Andy Date: 11/06/02 Time: 0:33
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddInVc7
* CResOrgAddInApp::OnConnection() now changes the app title to "Resource
* ID Organiser .NET"
*
* ***************** Version 1 *****************
* User: Andy Date: 7/06/02 Time: 22:34
* Created in $/Projects/AddIns/ResOrg/ResOrgAddInVc7
*
* $Nokeywords: $
*
************************************************************************/
// ResOrgAddInApp.cpp : implementation file
//
#include "StdAfx.h"
#include <initguid.h>
#include <AfxHtml.h>
#include "ResOrgNETAddIn_Res.h"
#include "MainFrame.h"
#include "ResOrgAddInApp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CResOrgAddInApp* GetApp(void)
{
return (CResOrgAddInApp*)AfxGetApp();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp
BEGIN_MESSAGE_MAP(CResOrgAddInApp, CResOrgAddInApp_BASE)
//{{AFX_MSG_MAP(CResOrgAddInApp)
ON_COMMAND( ID_FILE_NEW, OnFileNew)
ON_COMMAND( ID_APP_ABOUT, OnCmdAbout)
//}}AFX_MSG_MAP
ON_COMMAND( ID_FILE_OPEN, CResOrgAddInApp_BASE::OnFileOpen)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// The one and only CResOrgAddInApp object
CResOrgAddInApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp construction
CResOrgAddInApp::CResOrgAddInApp(void)
{
m_pDocManager = NULL;
m_pMainDocTemplate = NULL;
#ifdef _DEBUG
_crtBreakAlloc = -1;
#endif
}
CResOrgAddInApp::~CResOrgAddInApp(void)
{
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp virtual overrides
BOOL CResOrgAddInApp::InitInstance(void)
{
SetRegistryKey(_T("Riverblade"));
#if _MSC_VER >= 1300
// Change the name of the application
// The CWinApp destructor will free the memory for us
free((void*)m_pszAppName);
CString sAppTitle;
sAppTitle.LoadString(AFX_IDS_APP_TITLE);
m_pszAppName = _tcsdup( sAppTitle + _T(" .NET") );
::AfxGetModuleState()->m_lpszCurrentAppName = m_pszAppName;
#endif
_Module.SetResourceInstance(m_hInstance);
LoadStdProfileSettings(9); // Load standard INI file options (including MRU)
// Create CDynLinkLibrary objects for each of the
// extension DLLs we use.
//
// This is only necessary because DevStudio add-ins are usually
// implemented as Regular DLLs, rather than extension DLLs.
//
// Without this code, the resources in the extension DLLs
// would be unavailable (much badness, in fact)...
InitCJLibrary();
InitNGLibrary();
#if _MSC_VER < 1300 // BXFileDialog doesn't work with VC7 yet
InitBXFileDialogDll();
#endif
InitResOrgCore();
SetHelpFileName( _T("ResOrg.hlp") );
return CResOrgAddInApp_BASE::InitInstance();
}
void CResOrgAddInApp::OnConnection(void)
{
#if _MSC_VER < 1300 // BXFileDialog doesn't work with VC7 yet
m_pDocManager = new BXFileDialogDocManager;
#endif
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
m_pMainDocTemplate = new CMultiDocTemplate(
IDR_SYMBOL_FILE_TYPE,
RUNTIME_CLASS(CResOrgSymbolsDoc),
RUNTIME_CLASS(CResOrgMDIChildSplitWnd), // Custom MDI child frame
RUNTIME_CLASS(CResOrgSymbolsListView) );
m_pMainDocTemplate->m_bAutoDelete = TRUE;
AddDocTemplate(m_pMainDocTemplate);
m_pMultiSymbolFileTemplate = new CMultiDocTemplate(
IDR_SYMBOL_FILE_TYPE,
RUNTIME_CLASS(CResOrgSymbolsDocMultiFile),
RUNTIME_CLASS(CResOrgMDIChildSplitWnd), // custom MDI child frame
RUNTIME_CLASS(CResOrgSymbolsListView));
m_pHtmlDocTemplate = new CMultiDocTemplate(
IDR_HTML_TYPE,
RUNTIME_CLASS(CResOrgHtmlDoc),
RUNTIME_CLASS(CResOrgMDIChildWnd),
RUNTIME_CLASS(CResOrgHtmlView) );
// Create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
ASSERT_VALID(pMainFrame);
if (NULL != pMainFrame)
{
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
{
return;
}
pMainFrame->SetTitle(m_pszAppName);
pMainFrame->SetWindowText(m_pszAppName);
::AfxGetApp()->m_pMainWnd = pMainFrame;
// Initialize the cool menus...
UINT nToolBars[] =
{
IDR_MAINFRAME
}; // ...can be many toolbars...
pMainFrame->InitializeMenu( m_pMainDocTemplate,
IDR_SYMBOL_FILE_TYPE,
nToolBars,
1,
IDR_MAINFRAME);
pMainFrame->InitializeMenu( m_pHtmlDocTemplate,
IDR_HTML_TYPE,
nToolBars,
1,
IDR_MAINFRAME);
// Enable drag/drop open
pMainFrame->DragAcceptFiles();
// Read options from the registry, and kick off the
// version check (if appropriate)
Options.Initialise();
// Use Office XP style menus if selected
CCJMenu::SetMenuDrawMode(Options.UseXpStyleMenus() ? CCJMenu_DRAWMODE_XP : CCJMenu_DRAWMODE_ORIGINAL);
if (Options.IsMailingListPromptEnabled() )
{
Options.EnableMailingListPrompt(FALSE); // Only ask once
if (IDYES == DoMailingListQuery())
{
::ShellExecute( ::GetDesktopWindow(),
_T("open"),
Options.GetMailingListURL(),
NULL,
NULL,
SW_SHOWNORMAL);
}
}
Options.DoVersionCheck();
}
}
void CResOrgAddInApp::OnDisconnection(void)
{
if (NULL != m_pMainWnd)
{
if (::IsWindow(m_pMainWnd->m_hWnd))
{
m_pMainWnd->DestroyWindow();
}
delete m_pMainWnd;
}
if (NULL != m_pDocManager)
{
// Trick CWinApp into thinking we're an application (exe) to
// clear up static CDocManager objects:
//
// CDocManager::pStaticList
// CDocManager::pStaticDocManager
//
// Look at the CWinApp destructor in appcore.cpp for more details.
//
// Thanks to Gavin Jerman (gavin.jerman@zurich.co.uk) for this fix
AfxGetModuleState()->m_bDLL = FALSE;
delete m_pDocManager;
m_pDocManager = NULL;
}
}
BOOL CResOrgAddInApp::OnIdle(LONG lCount)
{
return CResOrgAddInApp_BASE::OnIdle(lCount);
}
int CResOrgAddInApp::ExitInstance(void)
{
// If a version check is running, Wait until it finishes
// before exiting (by now the main window has gone)
Options.OnExit();
return CResOrgAddInApp_BASE::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp implementation
// (none)
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp message handlers
void CResOrgAddInApp::OnFileNew(void)
{
CResOrgAddInApp_BASE::OnFileNew();
}
// App command to run the dialog
void CResOrgAddInApp::OnCmdAbout(void)
{
CResOrgAboutBox aboutDlg;
aboutDlg.SetModuleState( ::AfxGetStaticModuleState() );
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAddInApp operations
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -