DragonNest/Third/XTToolkitPro/Samples/Utilities/CommandBarsDesigner/CommandBarsDesigner.cpp

306 lines
8.3 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// CommandBarsDesigner.cpp : Defines the class behaviors for the application.
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CommandBarsDesigner.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "CommandBarsDesignerDoc.h"
#include "CommandBarsDesignerView.h"
#include "AboutDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCommandBarsDesignerApp
BEGIN_MESSAGE_MAP(CCommandBarsDesignerApp, CWinApp)
//{{AFX_MSG_MAP(CCommandBarsDesignerApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_NEWBLANK, OnFileNewBlank)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCommandBarsDesignerApp construction
CCommandBarsDesignerApp::CCommandBarsDesignerApp()
{
m_bRunAutomated = FALSE;
m_bNewBlank = FALSE;
EnableManifestEditor();
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CCommandBarsDesignerApp object
CCommandBarsDesignerApp theApp;
// This identifier was generated to be statistically unique for your app.
// You may change it if you prefer to choose a specific identifier.
// {D87BE4B3-AF03-44B7-A307-84820060A4C5}
static const CLSID clsid =
{ 0xd87be4b3, 0xaf03, 0x44b7, { 0xa3, 0x7, 0x84, 0x82, 0x0, 0x60, 0xa4, 0xc5 } };
/////////////////////////////////////////////////////////////////////////////
// CCommandBarsDesignerApp initialization
BOOL IsRegisterShellCommand()
{
for (int i = 1; i < __argc; i++)
{
LPCTSTR pszParam = __targv[i];
if (pszParam[0] == '-' || pszParam[0] == '/')
{
++pszParam;
if (_tcscmp(pszParam, _T("Regserver")) == 0)
return TRUE;
}
}
return FALSE;
}
BOOL CCommandBarsDesignerApp::InitInstance()
{
// Initialize OLE libraries
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
CXTPWinDwmWrapper().SetProcessDPIAware();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#if _MSC_VER <= 1200 // MFC 6.0 or earlier
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
#endif // MFC 6.0 or earlier
// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Codejock Software Sample Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
m_pDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CCommandBarsDesignerDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CCommandBarsDesignerView));
AddDocTemplate(m_pDocTemplate);
// Connect the COleTemplateServer to the document template.
// The COleTemplateServer creates new documents on behalf
// of requesting OLE containers by using information
// specified in the document template.
m_server.ConnectTemplate(clsid, m_pDocTemplate, FALSE);
// Register all OLE server factories as running. This enables the
// OLE libraries to create objects from other applications.
COleTemplateServer::RegisterAll();
// Note: MDI applications register all server objects without regard
// to the /Embedding or /Automation on the command line.
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
m_bRunAutomated = cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated;
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
BOOL bUserHasPermissions = ::RegSetValue(HKEY_CLASSES_ROOT, _T("CommandBarsDesigner.Document"), REG_SZ,
_T("Comman Document"), 15 * sizeof(TCHAR)) != ERROR_ACCESS_DENIED;
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// Check to see if launched as OLE server
if (m_bRunAutomated)
{
// Application was run with /Embedding or /Automation. Don't show the
// main window in this case.
return TRUE;
}
if (bUserHasPermissions)
{
// When a server application is launched stand-alone, it is a good idea
// to update the system registry in case it has been damaged.
m_server.UpdateRegistry(OAT_DISPATCH_OBJECT);
COleObjectFactory::UpdateRegistryAll();
}
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
if (IsRegisterShellCommand())
return FALSE;
// The main window has been initialized, so show and update it.
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
pMainFrame->RefreshPanes();
return TRUE;
}
// App command to run the dialog
void CCommandBarsDesignerApp::OnAppAbout()
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CCommandBarsDesignerApp::OnFileNewBlank()
{
m_bNewBlank = TRUE;
OnFileNew();
m_bNewBlank = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CCommandBarsDesignerApp message handlers
CString StripChars(CString str)
{
str.MakeUpper();
XTPStringRemove(str, _T('&'));
XTPStringRemove(str, _T(' '));
int i = 0;
while (i < str.GetLength())
{
if (!isupper(str[i])) XTPStringRemove(str, str[i]); else i++;
}
return str;
}
void XTPStringRemove(CString& str, TCHAR chRemove)
{
#if _MSC_VER < 1200 // MFC 5.0
class CXTPString: public CString
{
friend void XTPStringRemove(CString& str, TCHAR chRemove);
};
((CXTPString*)&str)->CopyBeforeWrite();
LPTSTR pstrSource = ((CXTPString*)&str)->m_pchData;
LPTSTR pstrDest = ((CXTPString*)&str)->m_pchData;
LPTSTR pstrEnd = ((CXTPString*)&str)->m_pchData + ((CXTPString*)&str)->GetData()->nDataLength;
while (pstrSource < pstrEnd)
{
if (*pstrSource != chRemove)
{
*pstrDest = *pstrSource;
pstrDest = _tcsinc(pstrDest);
}
pstrSource = _tcsinc(pstrSource);
}
*pstrDest = '\0';
int nCount = pstrSource - pstrDest;
((CXTPString*)&str)->GetData()->nDataLength -= nCount;
#else
str.Remove(chRemove);
#endif
}
int XTPStringDelete(CString& str, int nIndex, int nCount)
{
#if _MSC_VER < 1200 // MFC 5.0
class CXTPString: public CString
{
friend int XTPStringDelete(CString& str, int nIndex, int nCount);
};
if (nIndex < 0)
nIndex = 0;
int nNewLength = ((CXTPString*)&str)->GetData()->nDataLength;
if (nCount > 0 && nIndex < nNewLength)
{
((CXTPString*)&str)->CopyBeforeWrite();
int nBytesToCopy = nNewLength - (nIndex + nCount) + 1;
MEMCPY_S(((CXTPString*)&str)->m_pchData + nIndex,
((CXTPString*)&str)->m_pchData + nIndex + nCount, nBytesToCopy * sizeof(TCHAR));
((CXTPString*)&str)->GetData()->nDataLength = nNewLength - nCount;
}
return nNewLength;
#else
return str.Delete(nIndex, nCount);
#endif
}
COLORREF GetStaticFrameColor()
{
return GetXtremeColor(XPCOLOR_STATICFRAME);
}
BOOL IsRunAutomated()
{
return theApp.m_bRunAutomated;
}