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

📄 resourcesymbolfilebasevaluespage.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
字号:
/************************************************************************
 *
 *                  Resource ID Organiser Core Library
 *
 * (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Description : CResourceSymbolFileBaseValuesPage - "Base Values" page
 *                for resource symbol file properties
 *                
 *  Compiler    : Microsoft Visual C++ 6.0, Service Pack 3 or later
 *                Microsoft Visual C++ .NET 2003
 *                                                                       
 *  Target                                                               
 *  Environment : Windows 98/NT/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/ResOrgCore/ResourceSymbolFileBaseValuesPage.cpp $
 *   $Revision: 6 $
 *       $Date: 31/12/04 16:26 $
 *     $Author: Anna $
 *
 *    $History: ResourceSymbolFileBaseValuesPage.cpp $
 * 
 * *****************  Version 6  *****************
 * User: Anna         Date: 31/12/04   Time: 16:26
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * 1.  Added IDP_WARN_CONFIG_LOAD_FAILED and IDP_WARN_CONFIG_SAVE_FAILED
 * string table prompts for use when loading/saving config files (debug
 * builds only)
 * 2.  Updated file banners
 * 
 * *****************  Version 5  *****************
 * User: Anna         Date: 29/08/04   Time: 21:58
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * CResourceSymbolFileBaseValuesPage::OnOK() now saves the symbol file
 * configuration if the "Auto Save Symbol File Config" option is enabled
 * 
 * *****************  Version 4  *****************
 * User: Anna         Date: 21/08/04   Time: 19:02
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * CResourceSymbolFileBaseValuesPage::OnOK() now makes an
 * UpdateAllViews(SYM_REFRESH) call on the Document if the base values
 * have been changed. This ensures that any Symbols Displays are updated
 * correctly.
 * 
 * *****************  Version 3  *****************
 * User: Anna         Date: 1/07/03    Time: 21:02
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Fixed selection bugs with multi-file symbols displays
 * 
 * *****************  Version 2  *****************
 * User: Anna         Date: 26/06/03   Time: 20:22
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * 1.  Added resizing support
 * 2.  Changed the look of the page - it's now a lot easier to use, and
 * uses text colouring in the same way as
 * CResourceSymbolFileNextValuesPage
 * 
 * *****************  Version 1  *****************
 * User: Anna         Date: 15/04/03   Time: 19:18
 * Created in $/Projects/AddIns/ResOrg/ResOrgCore
 * 
 *
 * $Nokeywords: $
 *
 ************************************************************************/


#include "StdAfx.h"

#include "ResOrgCore_Priv.h"
#include "ResOrgCore_Globals.h"

#include "ResourceSymbolTypes.h"
#include "ResourceSymbolManager.h"
#include "ResOrgXmlWriter.h"

#include "ResourceSymbolFileBaseValuesPage.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileBaseValuesPage dialog

IMPLEMENT_DYNAMIC(CResourceSymbolFileBaseValuesPage, CResourceSymbolFileBaseValuesPage_BASE)

CResourceSymbolFileBaseValuesPage::CResourceSymbolFileBaseValuesPage(void)
	: CResourceSymbolFileBaseValuesPage_BASE(CResourceSymbolFileBaseValuesPage::IDD)
{
	m_sBaseResourceCaption	= _T("");
	m_sBaseControlCaption	= _T("");
	m_sBaseCommandCaption	= _T("");
	m_uBaseCommandValue		= 0;
	m_uBaseControlValue		= 0;
	m_uBaseResourceValue	= 0;
	m_sResources			= _T("");
	m_sControls				= _T("");
	m_sCommands				= _T("");
	m_sInfoText				= _T("");
}


void CResourceSymbolFileBaseValuesPage::DoDataExchange(CDataExchange* pDX)
{
	CResourceSymbolFileBaseValuesPage_BASE::DoDataExchange(pDX);

	if (NULL != m_pSymbols)
	{
		DDX_Text(pDX,			IDC_SYM_BASE_RESOURCE_CAPTION,	m_sBaseResourceCaption);
		DDX_Text(pDX,			IDC_SYM_BASE_RESOURCE,			m_uBaseResourceValue);
		DDV_MinMaxUInt(pDX,										m_uBaseResourceValue,	SYM_RESOURCE_VALUE_MIN, SYM_RESOURCE_VALUE_MAX);
		DDX_Text(pDX,			IDC_SYM_RESOURCES,				m_sResources);
		DDX_Text(pDX,			IDC_SYM_BASE_CONTROLS_CAPTION,	m_sBaseControlCaption);
		DDX_Text(pDX,			IDC_SYM_BASE_CONTROLS,			m_uBaseControlValue);
		DDV_MinMaxUInt(pDX,										m_uBaseControlValue,	SYM_CONTROL_VALUE_MIN, SYM_CONTROL_VALUE_MAX);
		DDX_Text(pDX,			IDC_SYM_CONTROLS,				m_sControls);
		DDX_Text(pDX,			IDC_SYM_BASE_COMMANDS_CAPTION,	m_sBaseCommandCaption);
		DDX_Text(pDX,			IDC_SYM_BASE_COMMANDS,			m_uBaseCommandValue);
		DDV_MinMaxUInt(pDX,										m_uBaseCommandValue,	SYM_COMMAND_VALUE_MIN, SYM_COMMAND_VALUE_MAX);
		DDX_Text(pDX,			IDC_SYM_COMMANDS,				m_sCommands);
	}
	DDX_Control(pDX,			IDC_SYM_WARNING_ICON,			m_ctrlInfoIcon);
	DDX_Control(pDX,			IDC_SYM_WARNING,				m_ctrlInfo);
	DDX_Text(pDX,				IDC_SYM_WARNING,				m_sInfoText);
}


BEGIN_MESSAGE_MAP(CResourceSymbolFileBaseValuesPage, CResourceSymbolFileBaseValuesPage_BASE)

	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(				IDC_SYM_CALC_BASE_VALUES,		OnClickedRecalculateAllValues)

END_MESSAGE_MAP()



/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileBaseValuesPage virtual overrides

BOOL CResourceSymbolFileBaseValuesPage::OnInitDialog(void)
{
	BOOL bResult = CResourceSymbolFileBaseValuesPage_BASE::OnInitDialog();

	m_Resizer.Add(IDC_SYM_BASE_VALUES_GROUP,		 0,   0, 100, 100);

	m_Resizer.Add(IDC_SYM_BASE_RESOURCE_CAPTION,	 0,  20,   0,   0);
	m_Resizer.Add(IDC_SYM_BASE_RESOURCE,			20,  20,   0,   0);
	m_Resizer.Add(IDC_SYM_RESOURCES,				40,  20,   0,   0);

	m_Resizer.Add(IDC_SYM_BASE_CONTROLS_CAPTION,	 0,  40,   0,   0);
	m_Resizer.Add(IDC_SYM_BASE_CONTROLS,			20,  40,   0,   0);
	m_Resizer.Add(IDC_SYM_CONTROLS,					40,  40,   0,   0);

	m_Resizer.Add(IDC_SYM_BASE_COMMANDS_CAPTION,	 0,  60,   0,   0);
	m_Resizer.Add(IDC_SYM_BASE_COMMANDS,			20,  60,   0,   0);
	m_Resizer.Add(IDC_SYM_COMMANDS,					40,  60,   0,   0);

	m_Resizer.Add(IDC_SYM_CALC_BASE_VALUES,			20,  80,   0,   0);

	m_Resizer.Add(IDC_SYM_WARNING_ICON,				 0,  90,   0,   0);
	m_Resizer.Add(IDC_SYM_WARNING,					 0,  90, 100,  10);
	
	m_sBaseResourceCaption.Format(	IDC_SYM_BASE_RESOURCE_CAPTION,	SYM_RESOURCE_VALUE_MIN, SYM_RESOURCE_VALUE_MAX);
	m_sBaseControlCaption.Format(	IDC_SYM_BASE_CONTROL_CAPTION,	SYM_CONTROL_VALUE_MIN, SYM_CONTROL_VALUE_MAX);
	m_sBaseCommandCaption.Format(	IDC_SYM_BASE_COMMAND_CAPTION,	SYM_COMMAND_VALUE_MIN, SYM_COMMAND_VALUE_MAX);

	CString sMsg;
	sMsg.Format(IDS_SYM_BASE_VALUES_INFO,
				SYM_RESOURCE_VALUE_MIN, SYM_RESOURCE_VALUE_MAX,
				SYM_CONTROL_VALUE_MIN, SYM_CONTROL_VALUE_MAX,
				SYM_COMMAND_VALUE_MIN, SYM_COMMAND_VALUE_MAX);

	SetInfoMessage(IDI_INFORMATION, sMsg);

	return bResult;
}


BOOL CResourceSymbolFileBaseValuesPage::OnSetActive(void)
{
	SetAvailableControls();

	return CResourceSymbolFileBaseValuesPage_BASE::OnSetActive();
}


void CResourceSymbolFileBaseValuesPage::OnOK(void)
{
	ASSERT(NULL != m_pSymbols);

	if (NULL != m_pSymbols)
	{
		bool bChanged = m_pSymbols->SetBaseResourceValue(m_uBaseResourceValue);
		bChanged |=	m_pSymbols->SetBaseControlValue(m_uBaseControlValue);
		bChanged |=	m_pSymbols->SetBaseCommandValue(m_uBaseCommandValue);
        
		// If one or more values was changed, the symbols in the manager will need to
		// be checked for range again
		if (bChanged)
		{
			m_pSymbols->CountConflicts();

			if (NULL != m_pDoc)
			{
				m_pDoc->UpdateAllViews(NULL, SYM_REFRESH);
			}
			// If the associated option is set, try to save the symbol file configuration
			if (Options.AutoSaveSymbolFileConfig() )
			{
				CString sConfigFilePathName = CResOrgXmlWriter::GetConfigFilePathName( m_pSymbols->GetPathName() );

				// Determine whether the file exists and is read-only.
				// If so, ask if the read only file should be overwritten.
				DWORD dwAttrib = ::GetFileAttributes(sConfigFilePathName);
				if (::FileExists(sConfigFilePathName) && (dwAttrib & FILE_ATTRIBUTE_READONLY) )
				{
					switch ( ::DoOverwritePrompt(sConfigFilePathName, false) )
					{
						case IDYES:
							if (!::SetFileAttributes(sConfigFilePathName, dwAttrib & ~FILE_ATTRIBUTE_READONLY) )
							{
								::AfxMessageBox(IDP_SYM_FILE_ERR_FILE_ATTRIBUTES, MB_OK | MB_ICONSTOP);
								return;
							}
							break;

						case IDNO:
						case IDCANCEL:
							return;

						default:
							ASSERT(false);
							break;
					}
				}

				CString sErrorMsg;
				if (!CResOrgXmlWriter::SaveSymbolFileConfig(m_pSymbols,
															sConfigFilePathName,
															&sErrorMsg) )
				{
#ifdef _DEBUG
					CNGSplitPath split(sConfigFilePathName);

					CString sMsg;
					sMsg.Format(IDP_WARN_CONFIG_SAVE_FAILED,
								split.GetFileName() + split.GetExtension(),
								sErrorMsg);

					::AfxMessageBox( sMsg, MB_OK | MB_ICONEXCLAMATION);
#endif
				}
			}
		}
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileBaseValuesPage implementation

void CResourceSymbolFileBaseValuesPage::SetInfoMessage(LPCTSTR pszIconID, const CString& sText)
{
	HICON hIcon = ::AfxGetApp()->LoadStandardIcon(pszIconID);

	m_ctrlInfoIcon.SetIcon(hIcon);

	m_sInfoText = sText;

	Invalidate();

	UpdateData(FALSE);
}


void CResourceSymbolFileBaseValuesPage::SetAvailableControls(void)
{
	BOOL bAvail = (NULL != m_pSymbols);

	ShowDlgControl(IDC_SYM_BASE_RESOURCE_CAPTION,		bAvail);
	ShowDlgControl(IDC_SYM_BASE_RESOURCE,				bAvail);
	ShowDlgControl(IDC_SYM_RESOURCES,					bAvail);

	ShowDlgControl(IDC_SYM_BASE_CONTROLS_CAPTION,		bAvail);
	ShowDlgControl(IDC_SYM_BASE_CONTROLS,				bAvail);
	ShowDlgControl(IDC_SYM_CONTROLS,					bAvail);

	ShowDlgControl(IDC_SYM_BASE_COMMANDS_CAPTION,		bAvail);
	ShowDlgControl(IDC_SYM_BASE_COMMANDS,				bAvail);
	ShowDlgControl(IDC_SYM_COMMANDS,					bAvail);

	ShowDlgControl(IDC_SYM_CALC_BASE_VALUES,			bAvail);
	ShowDlgControl(IDC_SYM_WARNING_ICON,				bAvail);
	ShowDlgControl(IDC_SYM_WARNING,						bAvail);
}



/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileBaseValuesPage operations

bool CResourceSymbolFileBaseValuesPage::SetSymbolManager(CResourceSymbolManager* pSymbols)
{
	BOOL bResult = CResourceSymbolFileBaseValuesPage_BASE::SetSymbolManager(pSymbols);

	if (NULL != m_pSymbols)
	{
		m_uBaseResourceValue	= m_pSymbols->GetBaseResourceValue();
		m_uBaseControlValue		= m_pSymbols->GetBaseControlValue();
		m_uBaseCommandValue		= m_pSymbols->GetBaseCommandValue();

		CResourceSymbolCounts Info;
		m_pSymbols->GetSymbolCount(Info);

		// Update summary text
		m_sResources.Format(IDS_SYM_RESOURCES,	Info.m_nResources);
		m_sControls.Format(IDS_SYM_CONTROLS,	Info.m_nControls);
		m_sCommands.Format(IDS_SYM_COMMANDS,	Info.m_nCommands);

		if (::IsWindow(GetSafeHwnd() ) )
		{
			UpdateData(FALSE);
		}
	}
	else
	{
		m_uBaseResourceValue	= 0;
		m_uBaseControlValue		= 0;
		m_uBaseCommandValue		= 0;
	}
	if (::IsWindow(GetSafeHwnd() ) )
	{
		UpdateData(FALSE);
	}

	return bResult;
}


/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileBaseValuesPage message handlers

#define	RGB_BLUE	RGB(0, 0, 255)

HBRUSH CResourceSymbolFileBaseValuesPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CResourceSymbolFileBaseValuesPage_BASE::OnCtlColor(pDC, pWnd, nCtlColor);
	
	if (NULL != m_pSymbols)
	{
		switch (pWnd->GetDlgCtrlID() )
		{
			case IDC_SYM_BASE_RESOURCE:
				if (m_uBaseResourceValue != m_pSymbols->GetBaseResourceValue() )
				{
					pDC->SetTextColor(RGB_BLUE);
				}
				break;

			case IDC_SYM_BASE_CONTROLS:
				if (m_uBaseControlValue != m_pSymbols->GetBaseControlValue() )
				{
					pDC->SetTextColor(RGB_BLUE);
				}
				break;

			case IDC_SYM_BASE_COMMANDS:
				if (m_uBaseCommandValue != m_pSymbols->GetBaseCommandValue() )
				{
					pDC->SetTextColor(RGB_BLUE);
				}
				break;

			default:
				break;
		}
	}
	
	return hbr;
}


void CResourceSymbolFileBaseValuesPage::OnClickedRecalculateAllValues(void)
{
	ASSERT(NULL != m_pSymbols);

	if (NULL != m_pSymbols)
	{
		CResourceSymbolCounts Info;
		m_pSymbols->GetSymbolCount(Info);

		// Update summary text
		m_sResources.Format(IDS_SYM_RESOURCES,	Info.m_nResources);
		m_sControls.Format(IDS_SYM_CONTROLS,	Info.m_nControls);
		m_sCommands.Format(IDS_SYM_COMMANDS,	Info.m_nCommands);

		m_pSymbols->CalculateBaseValues(m_uBaseResourceValue,
										m_uBaseCommandValue,
										m_uBaseControlValue);

		UpdateData(FALSE);
	}
}

⌨️ 快捷键说明

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