⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resorgaddinapp.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 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 + -