📄 maintoolwindowctrl.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 + -