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

📄 maintoolwindowctrl.h

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 H
字号:
/************************************************************************
 *
 *            Resource ID Organiser Add-In for Visual C++
 *
 * (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Description : CMainToolWindowCtrl - implements the ResOrg toolwindow
 *
 *  Compiler    : Microsoft Visual C++ .NET 2003
 *                                                                       
 *  Target                                                               
 *  Environment : Windows 2000/XP/Vista;
 *                Visual Studio 2002, 2003 or 2005
 *
 *  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/MainToolWindowCtrl.h $
 *   $Revision: 2 $
 *       $Date: 22/10/05 16:40 $
 *     $Author: Anna $
 *
 *    $History: MainToolWindowCtrl.h $
 * 
 * *****************  Version 2  *****************
 * User: Anna         Date: 22/10/05   Time: 16:40
 * Updated in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * Moved CVc6AutomationHelper and CVc7AutomationHelper to the ResOrgAddIn
 * and ResOrgNETAddIn projects respectively.
 * 
 * *****************  Version 1  *****************
 * User: Anna         Date: 22/10/05   Time: 11:10
 * Created in $/Projects/AddIns/ResOrg/ResOrgNETAddIn
 * 
 * $Nokeywords: $
 *
 ************************************************************************/

#pragma once


#include "Vc7AutomationHelper.h"


WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Read(LPSTREAM pstm);
WINCOMMCTRLAPI BOOL       WINAPI ImageList_Write(HIMAGELIST himl, LPSTREAM pstm);
WINCOMMCTRLAPI HRESULT WINAPI ImageList_ReadEx(DWORD dwFlags, LPSTREAM pstm, REFIID riid, PVOID* ppv);
WINCOMMCTRLAPI HRESULT WINAPI ImageList_WriteEx(HIMAGELIST himl, DWORD dwFlags, LPSTREAM pstm);

#include <atlctl.h>

#include <atlapp.h>
#include <atlwin.h>
#include <atlcrack.h>
#include <atlframe.h>


#include <atlctrls.h>
#include <atlddx.h>

#include "ButtonST.h"

#include "AddIn.h"

#include "ResOrgNETAddIn_Res.h"


#define WM_USER_RESID_FILE_CHANGED WM_USER + 69


// CMainToolWindowCtrl
class ATL_NO_VTABLE CMainToolWindowCtrl : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<IMainToolWindowCtrl, &IID_IMainToolWindowCtrl, &LIBID_ResOrgNETAddInLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
	public IPersistStreamInitImpl<CMainToolWindowCtrl>,
	public IOleControlImpl<CMainToolWindowCtrl>,
	public IOleObjectImpl<CMainToolWindowCtrl>,
	public IOleInPlaceActiveObjectImpl<CMainToolWindowCtrl>,
	public IViewObjectExImpl<CMainToolWindowCtrl>,
	public IOleInPlaceObjectWindowlessImpl<CMainToolWindowCtrl>,
	public ISupportErrorInfo,
	public IQuickActivateImpl<CMainToolWindowCtrl>,
	public IDataObjectImpl<CMainToolWindowCtrl>,
	public IProvideClassInfo2Impl<&CLSID_MainToolWindowCtrl, NULL, &LIBID_ResOrgNETAddInLib>,
	public CComCoClass<CMainToolWindowCtrl, &CLSID_MainToolWindowCtrl>,
	public CComCompositeControl<CMainToolWindowCtrl>,
	public CDialogResize<CMainToolWindowCtrl>,
	public CWinDataExchange<CMainToolWindowCtrl>

{
public:

	CMainToolWindowCtrl(void)
	{
		m_bWindowOnly = TRUE;
		CalcExtent(m_sizeExtent);

		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);
	}


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

		DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE | 
			OLEMISC_CANTLINKINSIDE | 
			OLEMISC_INSIDEOUT | 
			OLEMISC_ACTIVATEWHENVISIBLE | 
			OLEMISC_SETCLIENTSITEFIRST
		)

		DECLARE_REGISTRY_RESOURCEID(IDR_MAINTOOLWINDOWCTRL)

		DECLARE_NOT_AGGREGATABLE(CMainToolWindowCtrl)

		BEGIN_COM_MAP(CMainToolWindowCtrl)
			COM_INTERFACE_ENTRY(IMainToolWindowCtrl)
			COM_INTERFACE_ENTRY(IDispatch)
			COM_INTERFACE_ENTRY(IViewObjectEx)
			COM_INTERFACE_ENTRY(IViewObject2)
			COM_INTERFACE_ENTRY(IViewObject)
			COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
			COM_INTERFACE_ENTRY(IOleInPlaceObject)
			COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
			COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
			COM_INTERFACE_ENTRY(IOleControl)
			COM_INTERFACE_ENTRY(IOleObject)
			COM_INTERFACE_ENTRY(IPersistStreamInit)
			COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
			COM_INTERFACE_ENTRY(ISupportErrorInfo)
			COM_INTERFACE_ENTRY(IQuickActivate)
			COM_INTERFACE_ENTRY(IDataObject)
			COM_INTERFACE_ENTRY(IProvideClassInfo)
			COM_INTERFACE_ENTRY(IProvideClassInfo2)
		END_COM_MAP()

		BEGIN_PROP_MAP(CMainToolWindowCtrl)
			PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
			PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
			// Example entries
			// PROP_ENTRY("Property Description", dispid, clsid)
			// PROP_PAGE(CLSID_StockColorPage)
		END_PROP_MAP()


protected:
		WTL::CComboBox			m_ctrlProjects;

		WTL::CButtonST			m_ctrlProperties;
		WTL::CButtonST				m_ctrlEdit;
		WTL::CButtonST			m_ctrlRenumber;

		CNGHtmlStaticCtrl		m_ctrlResourceRangeCaption;
		CNGHtmlStaticCtrl		m_ctrlResourceRange;

		CNGHtmlStaticCtrl		m_ctrlCommandRangeCaption;
		CNGHtmlStaticCtrl		m_ctrlCommandRange;

		CNGHtmlStaticCtrl		m_ctrlOutOfRangeSymbolsCaption;
		CNGHtmlStaticCtrl		m_ctrlOutOfRangeSymbols;

		CNGHtmlStaticCtrl		m_ctrlConflictsCaption;
		CNGHtmlStaticCtrl		m_ctrlConflicts;

		WTL::CStatic			m_ctrlWarningIcon;
		CNGHtmlStaticCtrl		m_ctrlWarningText;

		CString					m_sWorkspacePathName;
		CString					m_sResourceSymbolFile;
		CString					m_sResourceRange;
		CString					m_sCommandRange;
		CString					m_sOutOfRangeSymbolsCaption;
		int						m_nOutOfRangeSymbols;
		CString					m_sOutOfRangeSymbols;
		CString					m_sConflictsCaption;
		int						m_nConflicts;
		CString					m_sConflicts;
		CString					m_sWarningText;

		CVc7AutomationHelper	m_AutomationHelper;
		CResourceSymbolManager*	m_pSymbols;
		CNGFileChangeMonitor	m_FileChangeMonitor;
		CNGResizeCtrl			m_Resizer;
		HWND					m_hWndResOrg;			// The (normlly hidden) main window of ResOrg

public:
		BEGIN_DLGRESIZE_MAP(CMainToolWindowCtrl)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_SYM_FILE,			DLSZ_SIZE_X)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_PROPERTIES,		DLSZ_MOVE_X)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_EDIT,				DLSZ_MOVE_X)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_RENUMBER,			DLSZ_MOVE_X)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_DIVIDER,			DLSZ_SIZE_X)
			DLGRESIZE_CONTROL(IDC_TOOLWIN_WARNING_MSG,		DLSZ_SIZE_X)
		END_DLGRESIZE_MAP()


		BEGIN_DDX_MAP(CMainToolWindowCtrl)
//			DDX_COMBO_STRING(	IDC_TOOLWIN_SYM_FILE,					m_sResourceSymbolFile);	//We'll have to write it before we can use it!

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

			DDX_TEXT(			IDC_TOOLWIN_WARNING_MSG,				m_sWarningText);
		END_DDX_MAP()


		BEGIN_MSG_MAP(CMainToolWindowCtrl)
			MSG_WM_INITDIALOG(OnInitDialog)
			MSG_WM_DESTROY(OnDestroy)

			COMMAND_HANDLER_EX(	IDC_TOOLWIN_SYM_FILE,				CBN_SELCHANGE,	OnCbnSelchangeResourceSymbolFile)
			COMMAND_HANDLER_EX(	IDC_TOOLWIN_REFRESH,				BN_CLICKED,		OnBnClickedToolwinRefresh)
			COMMAND_HANDLER_EX(	IDC_TOOLWIN_PROPERTIES,				BN_CLICKED,		OnBnClickedToolwinProperties)
			COMMAND_HANDLER_EX(	IDC_TOOLWIN_EDIT,					BN_CLICKED,		OnBnClickedToolwinEdit)
			COMMAND_HANDLER_EX(	IDC_TOOLWIN_RENUMBER,				BN_CLICKED,		OnBnClickedToolwinRenumber)
			COMMAND_HANDLER_EX(	IDC_TOOLWIN_REFRESH,				BN_CLICKED,		OnBnClickedToolwinRefresh)
			MESSAGE_HANDLER_EX(WM_USER_RESID_FILE_CHANGED,							OnMsgResourceSymbolFileChanged)

			CHAIN_MSG_MAP(CDialogResize<CMainToolWindowCtrl>)
			CHAIN_MSG_MAP(CComCompositeControl<CMainToolWindowCtrl>)

			REFLECT_NOTIFICATIONS()
		END_MSG_MAP()


		BEGIN_SINK_MAP(CMainToolWindowCtrl)
			//Make sure the Event Handlers have __stdcall calling convention
		END_SINK_MAP()

	STDMETHOD(OnAmbientPropertyChange)(DISPID dispid)
	{
		if (dispid == DISPID_AMBIENT_BACKCOLOR)
		{
			SetBackgroundColorFromAmbient();
			FireViewChange();
		}
		return IOleControlImpl<CMainToolWindowCtrl>::OnAmbientPropertyChange(dispid);
	}

// ISupportsErrorInfo
	STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
	{
		static const IID* arr[] = 
		{
			&IID_IMainToolWindowCtrl,
		};

		for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
		{
			if (InlineIsEqualGUID(*arr[i], riid))
				return S_OK;
		}
		return S_FALSE;
	}

// IViewObjectEx
	DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)

// IMainToolWindowCtrl

	enum { IDD = IDD_MAINTOOLWINDOWCTRL };

	DECLARE_PROTECT_FINAL_CONSTRUCT()

	HRESULT FinalConstruct()
	{
		return S_OK;
	}
	
	void FinalRelease() 
	{
	}


			// Interface methods
		STDMETHOD(Initialise)(IDispatch* pDispatch, HWND hWndResOrg);
		STDMETHOD(Refresh)(void);


			LRESULT					OnInitDialog(HWND hWnd, LPARAM lParam);
			void					OnDestroy(void);
			void					OnCbnSelchangeResourceSymbolFile(int nCode, UINT uID, HWND hWndCtrl);
			void					OnBnClickedToolwinRefresh(int nCode, UINT uID, HWND hWndCtrl);
			void					OnBnClickedToolwinEdit(int nCode, UINT uID, HWND hWndCtrl);
			void					OnBnClickedToolwinRenumber(int nCode, UINT uID, HWND hWndCtrl);
			void					OnBnClickedToolwinProperties(int nCode, UINT uID, HWND hWndCtrl);
			LRESULT					OnMsgResourceSymbolFileChanged(UINT uMsg, WPARAM wParam, LPARAM lParam);


// Implementation
protected:
			bool					UpdateSymbolFilesCtrl(void);

			bool					ConfigureSymbolManager(	CResourceSymbolManager* pSymbols,
															const CString& sPathName) const;

			bool					UpdateSymbolPropertiesCtrls(void);

			void					SetAvailableControls(void);

			CString					GetFullPath(const CString& sRelativePath) const;

			bool					Save(CResourceSymbolManager* pSymbols);

#ifdef _RESORG_EXPIRY_DATE
			void					ShowExpiryWarning(void);
#endif

			BOOL					DDX_Text(UINT nID, CString& strText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0);
};

OBJECT_ENTRY_AUTO(__uuidof(MainToolWindowCtrl), CMainToolWindowCtrl)

⌨️ 快捷键说明

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