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

📄 resorgnetaddintoolwinformview.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
 *
 *            Resource ID Organiser Add-In for Visual C++.NET
 *
 * (c) Copyright 2000-2004 by Anna-Jayne Metcalfe (resorg@annasplace.me.uk)
 *                         All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Filename    : ResOrgNETAddInToolWinFormView.cpp
 *
 *  Description : CResOrgNETAddInToolWinFormView - ResOrg.NET Tool Window
 *                form view class
 *
 *  Compiler    : Microsoft Visual C++ .NET 2003
 *                                                                       
 *  Target                                                               
 *  Environment : Windows 2000/XP
 *
 *  NOTE:
 *
 *    This software is provided "as is" free for personal use. All
 *    title and copyrights in and to the software, including but not
 *    limited to any images, text, etc. incorporated into it, are
 *    owned by Anna-Jayne Metcalfe, except where acknowledged otherwise.
 *
 *    Your may freely to use this code in your own products, PROVIDED
 *    this notice is not removed or modified.
 *
 *
 *    Visit http://www.annasplace.me.uk/resorg for latest updates
 *
 ************************************************************************
 *
 *   MODIFICATION HISTORY:
 *
 *           This is a controlled document. See project configuration
 *           control tool for latest version and full version history.
 *
 *    $Archive: /Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows/ResOrgNETAddInToolWinFormView.cpp $
 *   $Revision: 16 $
 *       $Date: 30/08/04 0:44 $
 *     $Author: Anna $
 *
 *    $History: ResOrgNETAddInToolWinFormView.cpp $
 * 
 * *****************  Version 16  *****************
 * User: Anna         Date: 30/08/04   Time: 0:44
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * 1.  CResOrgNETAddInToolWinFormView::Save() now checks that the file
 * exists before attempting to check whether it is read only
 * 2.  Moved CResOrgNETAddInToolWinFormView::DoOverwritePrompt() to
 * ResOrgCore_Globals.cpp/h
 * 
 * *****************  Version 15  *****************
 * User: Anna         Date: 24/08/04   Time: 0:14
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Added support for out of range symbols
 * 
 * *****************  Version 14  *****************
 * User: Anna         Date: 1/07/03    Time: 23:30
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Be a little more careful about dealing with relative pathnames. Also
 * guarded some methods against empty workspace/symbol file pathnames just
 * in case
 * 
 * *****************  Version 13  *****************
 * User: Anna         Date: 7/03/03    Time: 15:37
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Modified CResOrgNETAddInToolWinFormView::UpdateSymbolPropertiesCtrls()
 * to work better with CNGHtmlStaticCtrl
 * 
 * *****************  Version 12  *****************
 * User: Anna         Date: 15/02/03   Time: 21:05
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Knock on change from CResourceSymbolFilePropertySheet
 * 
 * *****************  Version 11  *****************
 * User: Anna         Date: 2/01/03    Time: 0:31
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Replaced CQhtmWnd controls with CNGHtmlStaticCtrl (QHTM is
 * overspecified for what I need here)
 * 
 * *****************  Version 10  *****************
 * User: Anna         Date: 25/11/02   Time: 16:50
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Changed website address in banner
 * 
 * *****************  Version 9  *****************
 * User: Anna         Date: 22/10/02   Time: 14:45
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Changed name/email address (at last!)
 * 
 * *****************  Version 8  *****************
 * User: Andy         Date: 10/08/02   Time: 0:17
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Added a warning if the Next Symbol values are in use
 * 
 * *****************  Version 7  *****************
 * User: Andy         Date: 9/08/02    Time: 17:01
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Added expiry date checks in the handlers for the "Properties", "Edit"
 * and "Renumber" buttons)
 * 
 * *****************  Version 6  *****************
 * User: Andy         Date: 8/08/02    Time: 20:42
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * 1.  Added CResOrgNETAddInToolWinFormView::PreTranslateMessage() in a
 * vain attempt to get the tooltips on the buttons working (this is
 * driving me nuts, but it's probably something really dumb)
 * 2.  If no projects are loaded the expiry date warning is now shown (if
 * a dev build) and the combobox is disabled
 * 
 * *****************  Version 5  *****************
 * User: Andy         Date: 6/08/02    Time: 12:32
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * The warning message is now also used to display expiry date information
 * 
 * *****************  Version 4  *****************
 * User: Andy         Date: 6/08/02    Time: 10:35
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * Corrected a syntax error (forgot to compile before checking in!
 * 
 * *****************  Version 3  *****************
 * User: Andy         Date: 5/08/02    Time: 13:48
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * 1.Converted literal strings to string table entries
 * 
 * *****************  Version 2  *****************
 * User: Andy         Date: 2/08/02    Time: 17:04
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddInToolWindows
 * 1.  Added file banners
 * 2.  Tidied up the code a little - removing unused capabilities
 * 
 * $Nokeywords: $
 *
 ************************************************************************/

#include "StdAfx.h"

#include "ResOrgNETAddInToolWindows.h"

#include "ResOrgNETAddInToolWinFormView.h"


/////////////////////////////////////////////////////////////////////////////
// CResOrgNETAddInToolWinFormView

IMPLEMENT_DYNCREATE(CResOrgNETAddInToolWinFormView, CResOrgNETAddInToolWinFormView_BASE)

CResOrgNETAddInToolWinFormView::CResOrgNETAddInToolWinFormView(void)
	: CResOrgNETAddInToolWinFormView_BASE(CResOrgNETAddInToolWinFormView::IDD)
{
	m_hWndResOrg			= NULL;
	m_pSymbols				= NULL;

	m_sResourceSymbolFile	= _T("");
	m_sResourceRange		= _T("");
	m_sCommandRange			= _T("");

	m_nOutOfRangeSymbols	= 0;
	m_sOutOfRangeSymbols	= _T("");

	m_nConflicts			= 0;
	m_sConflicts			= _T("");

	m_sOutOfRangeSymbolsCaption.LoadString(IDC_TOOLWIN_SYM_OUT_OF_RANGE_CAPTION);
	m_sConflictsCaption.LoadString(IDC_TOOLWIN_SYM_CONFLICTS_CAPTION);

	m_pSymbols = new CResourceSymbolManager;
	ASSERT(NULL != m_pSymbols);
}


CResOrgNETAddInToolWinFormView::~CResOrgNETAddInToolWinFormView(void)
{
	if (NULL != m_pSymbols)
	{
		delete m_pSymbols;
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgNETAddInToolWinFormView virtual overrides

void CResOrgNETAddInToolWinFormView::DoDataExchange(CDataExchange* pDX)
{
	CResOrgNETAddInToolWinFormView_BASE::DoDataExchange(pDX);

	DDX_Control(pDX,		IDC_TOOLWIN_SYM_FILE,					m_ctrlProjects);
	DDX_Control(pDX,		IDC_TOOLWIN_PROPERTIES,					m_ctrlProperties);
	DDX_Control(pDX,		IDC_TOOLWIN_EDIT,						m_ctrlEdit);
	DDX_Control(pDX,		IDC_TOOLWIN_RENUMBER,					m_ctrlRenumber);

	DDX_Control(pDX,		IDC_TOOLWIN_SYM_LOW_RANGE_CAPTION,		m_ctrlResourceRangeCaption);
	DDX_Control(pDX,		IDC_TOOLWIN_SYM_HIGH_RANGE_CAPTION,		m_ctrlCommandRangeCaption);

	DDX_Control(pDX,		IDC_TOOLWIN_SYM_LOW_RANGE,				m_ctrlResourceRange);
	DDX_Control(pDX,		IDC_TOOLWIN_SYM_HIGH_RANGE,				m_ctrlCommandRange);

	DDX_Control(pDX,		IDC_TOOLWIN_SYM_OUT_OF_RANGE_CAPTION,	m_ctrlOutOfRangeSymbolsCaption);
	DDX_Control(pDX,		IDC_TOOLWIN_SYM_OUT_OF_RANGE,			m_ctrlOutOfRangeSymbols);

	DDX_Control(pDX,		IDC_TOOLWIN_SYM_CONFLICTS_CAPTION,		m_ctrlConflictsCaption);
	DDX_Control(pDX,		IDC_TOOLWIN_SYM_CONFLICTS,				m_ctrlConflicts);

	DDX_Control(pDX,		IDC_TOOLWIN_WARNING_ICON,				m_ctrlWarningIcon);
	DDX_Control(pDX,		IDC_TOOLWIN_WARNING_MSG,				m_ctrlWarningText);
	
	DDX_CBStringExact(pDX,	IDC_TOOLWIN_SYM_FILE,					m_sResourceSymbolFile);

	DDX_Text(pDX,			IDC_TOOLWIN_SYM_LOW_RANGE,				m_sResourceRange);
	DDX_Text(pDX,			IDC_TOOLWIN_SYM_HIGH_RANGE,				m_sCommandRange);
	
	DDX_Text(pDX,			IDC_TOOLWIN_SYM_OUT_OF_RANGE_CAPTION,	m_sOutOfRangeSymbolsCaption);
	DDX_Text(pDX,			IDC_TOOLWIN_SYM_OUT_OF_RANGE,			m_sOutOfRangeSymbols);
	
	DDX_Text(pDX,			IDC_TOOLWIN_SYM_CONFLICTS_CAPTION,		m_sConflictsCaption);
	DDX_Text(pDX,			IDC_TOOLWIN_SYM_CONFLICTS,				m_sConflicts);

	DDX_Text(pDX,			IDC_TOOLWIN_WARNING_MSG,				m_sWarningText);
}


#define WM_USER_RESID_FILE_CHANGED WM_USER + 69

BEGIN_MESSAGE_MAP(CResOrgNETAddInToolWinFormView, CResOrgNETAddInToolWinFormView_BASE)

	ON_WM_CTLCOLOR()
	ON_CBN_SELCHANGE(		IDC_TOOLWIN_SYM_FILE,			OnCbnSelchangeResourceSymbolFile)
	ON_BN_CLICKED(			IDC_TOOLWIN_REFRESH,			OnBnClickedToolwinRefresh)
	ON_BN_CLICKED(			IDC_TOOLWIN_PROPERTIES,			OnBnClickedToolwinProperties)
	ON_BN_CLICKED(			IDC_TOOLWIN_EDIT,				OnBnClickedToolwinEdit)
	ON_BN_CLICKED(			IDC_TOOLWIN_RENUMBER,			OnBnClickedToolwinRenumber)
	ON_MESSAGE(				WM_USER_RESID_FILE_CHANGED,		OnMsgResourceSymbolFileChanged)

END_MESSAGE_MAP()


BOOL CResOrgNETAddInToolWinFormView::Create(LPCTSTR lpszClassName,
											LPCTSTR lpszWindowName,
											DWORD dwStyle,
											const RECT& rect,
											CWnd* pParentWnd,
											UINT nID,
											CCreateContext* pContext/* = NULL*/)
{
	int nResult = CResOrgNETAddInToolWinFormView_BASE::Create(	lpszClassName,
																lpszWindowName,
																dwStyle,
																rect,
																pParentWnd,
																nID,
																pContext);

	if (nResult > 0)
	{
		UpdateData(FALSE);

		m_Resizer.Create(this);

		m_Resizer.Add(IDC_TOOLWIN_SYM_FILE,		0, 0, 50, 0);
		m_Resizer.Add(IDC_TOOLWIN_PROPERTIES,	50, 0, 0, 0);
		m_Resizer.Add(IDC_TOOLWIN_EDIT,			50, 0, 0, 0);
		m_Resizer.Add(IDC_TOOLWIN_RENUMBER,		50, 0, 0, 0);

		m_Resizer.Add(IDC_TOOLWIN_DIVIDER,		0, 0, 100, 0);
		m_Resizer.Add(IDC_TOOLWIN_WARNING_MSG,	0, 0, 50, 0);

		m_ctrlProperties.SetIcon(IDI_TOOLWIN_PROPERTIES);
		m_ctrlProperties.SetTooltipText(IDS_TOOLWIN_PROPERTIES, TRUE);

		m_ctrlEdit.SetIcon(IDI_TOOLWIN_EDIT);
		m_ctrlEdit.SetTooltipText(IDS_TOOLWIN_EDIT, TRUE);

		m_ctrlRenumber.SetIcon(IDI_TOOLWIN_RENUMBER);
		m_ctrlRenumber.SetTooltipText(IDS_TOOLWIN_RENUMBER, TRUE);

		ASSERT( ::IsWindow(m_ctrlWarningIcon.m_hWnd) );

		m_ctrlResourceRangeCaption.SetWindowText( _T("Resource / Control IDs:") );
		m_ctrlCommandRangeCaption.SetWindowText( _T("Command IDs:") );

		m_ctrlResourceRange.SetWindowText( _T("") );
		m_ctrlCommandRange.SetWindowText( _T("") );
		m_ctrlOutOfRangeSymbols.SetWindowText( _T("") );
		m_ctrlConflicts.SetWindowText( _T("") );

		#ifdef _DEBUG
			// The Refresh button really shouldn't be needed - it's really just
			// there for testing
			CWnd* pWnd = GetDlgItem(IDC_TOOLWIN_REFRESH);
			if (NULL != pWnd) pWnd->ShowWindow(TRUE);
		#endif
	}
	return nResult;
}


BOOL CResOrgNETAddInToolWinFormView::PreTranslateMessage(MSG* pMsg)
{
/*	AJM 8.8.2002 this doesn't work..WM_MOUSEMOVE (the one we really want)
	never gets here
	CToolTipCtrl* pToolTip = NULL;

	switch (pMsg->message)
	{
		case WM_MOUSEMOVE:
		case WM_LBUTTONDOWN:
		case WM_LBUTTONUP:
		case WM_MBUTTONDOWN:
		case WM_MBUTTONUP:
		case WM_RBUTTONDOWN:
		case WM_RBUTTONUP:
				pToolTip = m_ctrlProperties.GetToolTips();
				if (NULL != pToolTip)
				{
					pToolTip->Activate(TRUE);
					pToolTip->RelayEvent(pMsg);
				}
				break;

		default:
			break;
	}
*/
	return CFormView::PreTranslateMessage(pMsg);
}


// This override is necessary since this view is created on the stack rather
// than the heap...and CView::PostNcDestroy() does a "delete this"!
//
// It's also a convenient place to unconfigure the automation helper
// before it's destroyed (it will ASSERT otherwise, since not
// clearing it down in normal use would be very, very bad)
void CResOrgNETAddInToolWinFormView::PostNcDestroy(void)
{
	m_AutomationHelper.SetDTE(NULL);
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgNETAddInToolWinFormView operations

bool CResOrgNETAddInToolWinFormView::Initialise(CComPtr<EnvDTE::_DTE> pDTE, HWND hWndResOrg)
{
	m_AutomationHelper.SetDTE(pDTE);

	m_hWndResOrg = hWndResOrg;

	return true;
}


void CResOrgNETAddInToolWinFormView::Refresh(void)
{
	if (m_FileChangeMonitor.IsMonitoring() )
	{
		m_FileChangeMonitor.Stop();
	}
	if (UpdateSymbolFilesCtrl() && !m_sWorkspacePathName.IsEmpty() && !m_sResourceSymbolFile.IsEmpty() )
	{
		CNGSplitPath split(m_sWorkspacePathName);
		CString sWorkspaceFolder = split.GetDrive() + split.GetDirectory();

		CString sPathName = ::CombinePath(sWorkspaceFolder, m_sResourceSymbolFile);

		// If the file has changed, parse it and update statistics
		if ( ConfigureSymbolManager(m_pSymbols, sPathName) )
		{
			UpdateSymbolPropertiesCtrls();

			m_FileChangeMonitor.Start(	sPathName,
										this,
										WM_USER_RESID_FILE_CHANGED);
		}
	}
	SetAvailableControls();
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgNETAddInToolWinFormView implementation

bool CResOrgNETAddInToolWinFormView::UpdateSymbolFilesCtrl(void)
{
	m_sWorkspacePathName = m_AutomationHelper.GetSolutionPathName();

	CStringArray arrayProjects;
	m_AutomationHelper.GetProjectNames(arrayProjects);

	CStringArray arraySymbolFilePathNames;

	for (int n = 0; n < arrayProjects.GetSize(); n++)
	{
		CString sProject = arrayProjects[n];
		if (!sProject.IsEmpty() )
		{
			CString sResourceFile = m_AutomationHelper.GetResourceFileName(sProject);
			if (!sResourceFile.IsEmpty() )
			{
				CString sSymbolFile = ::GetSymbolFileName(sResourceFile);
				if (!sSymbolFile.IsEmpty())
				{
					arraySymbolFilePathNames.Add(sSymbolFile);
				}
			}
		}
	}

	CStringArray arraySymbolFiles;

	for (int n = 0; n < arraySymbolFilePathNames.GetSize(); n++)
	{
		CString sSymbolFile = arraySymbolFilePathNames[n];
		if (!sSymbolFile.IsEmpty() )
		{
			CString sRelativeFileName;
			LPTSTR pszRelativeFileName = sRelativeFileName.GetBuffer(_MAX_PATH);

			::PathRelativePathTo(	pszRelativeFileName,
									m_sWorkspacePathName,
									FILE_ATTRIBUTE_NORMAL,
									sSymbolFile,
									FILE_ATTRIBUTE_NORMAL);

			sRelativeFileName.ReleaseBuffer();
			if (!sRelativeFileName.IsEmpty() )
			{
				arraySymbolFiles.Add(sRelativeFileName);
			}
		}
	}
	::FillComboBox(&m_ctrlProjects, arraySymbolFiles, m_sResourceSymbolFile);

	// Only enable the combobox if there's something in it
	m_ctrlProjects.EnableWindow(arraySymbolFiles.GetSize() > 0);

	if (CB_ERR == m_ctrlProjects.FindStringExact(0, m_sResourceSymbolFile) )
	{
		m_ctrlProjects.SetCurSel(0);

		UpdateData(TRUE);		// Update m_sResourceSymbolFile

		// Force the dependent controls to update
		OnCbnSelchangeResourceSymbolFile();

		return true;			// A true return indicates that the selection has changed
		
	}
	return false;				// The selection is unchanged
}


bool CResOrgNETAddInToolWinFormView::ConfigureSymbolManager(CResourceSymbolManager* pSymbols,
															const CString& sPathName) const
{
	CStdioFile f;
	CFileException e;

	if (f.Open(	sPathName,
				CFile::modeRead |
				CFile::shareDenyWrite,
				&e) )
	{
		// File opened OK
		//
		// Now create an archive, and an empty text buffer
		CArchive ar(&f, CArchive::load);

		pSymbols->Serialize(ar);

		try

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -