CommandBarsDesigner.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:9k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // CommandBarsDesigner.cpp : Defines the class behaviors for the application.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "CommandBarsDesigner.h"
  22. #include "MainFrm.h"
  23. #include "ChildFrm.h"
  24. #include "CommandBarsDesignerDoc.h"
  25. #include "CommandBarsDesignerView.h"
  26. #include "AboutDlg.h"
  27. #ifdef _DEBUG
  28. #define new DEBUG_NEW
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #endif
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CCommandBarsDesignerApp
  34. BEGIN_MESSAGE_MAP(CCommandBarsDesignerApp, CWinApp)
  35. //{{AFX_MSG_MAP(CCommandBarsDesignerApp)
  36. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  37. // NOTE - the ClassWizard will add and remove mapping macros here.
  38. //    DO NOT EDIT what you see in these blocks of generated code!
  39. //}}AFX_MSG_MAP
  40. // Standard file based document commands
  41. ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  42. ON_COMMAND(ID_FILE_NEWBLANK, OnFileNewBlank)
  43. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  44. // Standard print setup command
  45. ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CCommandBarsDesignerApp construction
  49. CCommandBarsDesignerApp::CCommandBarsDesignerApp()
  50. {
  51. m_bRunAutomated = FALSE;
  52. m_bNewBlank = FALSE;
  53. EnableManifestEditor();
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // The one and only CCommandBarsDesignerApp object
  57. CCommandBarsDesignerApp theApp;
  58. // This identifier was generated to be statistically unique for your app.
  59. // You may change it if you prefer to choose a specific identifier.
  60. // {D87BE4B3-AF03-44B7-A307-84820060A4C5}
  61. static const CLSID clsid =
  62. { 0xd87be4b3, 0xaf03, 0x44b7, { 0xa3, 0x7, 0x84, 0x82, 0x0, 0x60, 0xa4, 0xc5 } };
  63. /////////////////////////////////////////////////////////////////////////////
  64. // CCommandBarsDesignerApp initialization
  65. BOOL IsRegisterShellCommand()
  66. {
  67. for (int i = 1; i < __argc; i++)
  68. {
  69. LPCTSTR pszParam = __targv[i];
  70. if (pszParam[0] == '-' || pszParam[0] == '/')
  71. {
  72. ++pszParam;
  73. if (_tcscmp(pszParam, _T("Regserver")) == 0)
  74. return TRUE;
  75. }
  76. }
  77. return FALSE;
  78. }
  79. BOOL CCommandBarsDesignerApp::InitInstance()
  80. {
  81. // Initialize OLE libraries
  82. if (!AfxOleInit())
  83. {
  84. AfxMessageBox(IDP_OLE_INIT_FAILED);
  85. return FALSE;
  86. }
  87. AfxEnableControlContainer();
  88. CXTPWinDwmWrapper().SetProcessDPIAware();
  89. // Standard initialization
  90. // If you are not using these features and wish to reduce the size
  91. //  of your final executable, you should remove from the following
  92. //  the specific initialization routines you do not need.
  93. #if _MSC_VER <= 1200 // MFC 6.0 or earlier
  94. #ifdef _AFXDLL
  95. Enable3dControls();         // Call this when using MFC in a shared DLL
  96. #else
  97. Enable3dControlsStatic();   // Call this when linking to MFC statically
  98. #endif
  99. #endif // MFC 6.0 or earlier
  100. // Change the registry key under which our settings are stored.
  101. // TODO: You should modify this string to be something appropriate
  102. // such as the name of your company or organization.
  103. SetRegistryKey(_T("Codejock Software Sample Applications"));
  104. LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  105. // Register the application's document templates.  Document templates
  106. //  serve as the connection between documents, frame windows and views.
  107. m_pDocTemplate = new CMultiDocTemplate(
  108. IDR_MAINFRAME,
  109. RUNTIME_CLASS(CCommandBarsDesignerDoc),
  110. RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  111. RUNTIME_CLASS(CCommandBarsDesignerView));
  112. AddDocTemplate(m_pDocTemplate);
  113. // Connect the COleTemplateServer to the document template.
  114. //  The COleTemplateServer creates new documents on behalf
  115. //  of requesting OLE containers by using information
  116. //  specified in the document template.
  117. m_server.ConnectTemplate(clsid, m_pDocTemplate, FALSE);
  118. // Register all OLE server factories as running.  This enables the
  119. //  OLE libraries to create objects from other applications.
  120. COleTemplateServer::RegisterAll();
  121. // Note: MDI applications register all server objects without regard
  122. //  to the /Embedding or /Automation on the command line.
  123. // Parse command line for standard shell commands, DDE, file open
  124. CCommandLineInfo cmdInfo;
  125. ParseCommandLine(cmdInfo);
  126. m_bRunAutomated = cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated;
  127. // create main MDI Frame window
  128. CMainFrame* pMainFrame = new CMainFrame;
  129. if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  130. return FALSE;
  131. m_pMainWnd = pMainFrame;
  132. // Enable drag/drop open
  133. m_pMainWnd->DragAcceptFiles();
  134. BOOL bUserHasPermissions = ::RegSetValue(HKEY_CLASSES_ROOT, _T("CommandBarsDesigner.Document"), REG_SZ,
  135. _T("Comman Document"), 15 * sizeof(TCHAR)) != ERROR_ACCESS_DENIED;
  136. // Enable DDE Execute open
  137. EnableShellOpen();
  138. RegisterShellFileTypes(TRUE);
  139. // Check to see if launched as OLE server
  140. if (m_bRunAutomated)
  141. {
  142. // Application was run with /Embedding or /Automation.  Don't show the
  143. //  main window in this case.
  144. return TRUE;
  145. }
  146. if (bUserHasPermissions)
  147. {
  148. // When a server application is launched stand-alone, it is a good idea
  149. //  to update the system registry in case it has been damaged.
  150. m_server.UpdateRegistry(OAT_DISPATCH_OBJECT);
  151. COleObjectFactory::UpdateRegistryAll();
  152. }
  153. // Dispatch commands specified on the command line
  154. if (!ProcessShellCommand(cmdInfo))
  155. return FALSE;
  156. if (IsRegisterShellCommand())
  157. return FALSE;
  158. // The main window has been initialized, so show and update it.
  159. pMainFrame->ShowWindow(m_nCmdShow);
  160. pMainFrame->UpdateWindow();
  161. pMainFrame->RefreshPanes();
  162. return TRUE;
  163. }
  164. // App command to run the dialog
  165. void CCommandBarsDesignerApp::OnAppAbout()
  166. {
  167. CAboutDlg dlgAbout;
  168. dlgAbout.DoModal();
  169. }
  170. void CCommandBarsDesignerApp::OnFileNewBlank()
  171. {
  172. m_bNewBlank = TRUE;
  173. OnFileNew();
  174. m_bNewBlank = FALSE;
  175. }
  176. /////////////////////////////////////////////////////////////////////////////
  177. // CCommandBarsDesignerApp message handlers
  178. CString StripChars(CString str)
  179. {
  180. str.MakeUpper();
  181. XTPStringRemove(str, _T('&'));
  182. XTPStringRemove(str, _T(' '));
  183. int i = 0;
  184. while (i < str.GetLength())
  185. {
  186. if (!isupper(str[i])) XTPStringRemove(str, str[i]); else i++;
  187. }
  188. return str;
  189. }
  190. void XTPStringRemove(CString& str, TCHAR chRemove)
  191. {
  192. #if _MSC_VER < 1200 // MFC 5.0
  193. class CXTPString: public CString
  194. {
  195. friend void XTPStringRemove(CString& str, TCHAR chRemove);
  196. };
  197. ((CXTPString*)&str)->CopyBeforeWrite();
  198. LPTSTR pstrSource = ((CXTPString*)&str)->m_pchData;
  199. LPTSTR pstrDest = ((CXTPString*)&str)->m_pchData;
  200. LPTSTR pstrEnd = ((CXTPString*)&str)->m_pchData + ((CXTPString*)&str)->GetData()->nDataLength;
  201. while (pstrSource < pstrEnd)
  202. {
  203. if (*pstrSource != chRemove)
  204. {
  205. *pstrDest = *pstrSource;
  206. pstrDest = _tcsinc(pstrDest);
  207. }
  208. pstrSource = _tcsinc(pstrSource);
  209. }
  210. *pstrDest = '';
  211. int nCount = pstrSource - pstrDest;
  212. ((CXTPString*)&str)->GetData()->nDataLength -= nCount;
  213. #else
  214. str.Remove(chRemove);
  215. #endif
  216. }
  217. int XTPStringDelete(CString& str, int nIndex, int nCount)
  218. {
  219. #if _MSC_VER < 1200 // MFC 5.0
  220. class CXTPString: public CString
  221. {
  222. friend int XTPStringDelete(CString& str, int nIndex, int nCount);
  223. };
  224. if (nIndex < 0)
  225. nIndex = 0;
  226. int nNewLength = ((CXTPString*)&str)->GetData()->nDataLength;
  227. if (nCount > 0 && nIndex < nNewLength)
  228. {
  229. ((CXTPString*)&str)->CopyBeforeWrite();
  230. int nBytesToCopy = nNewLength - (nIndex + nCount) + 1;
  231. MEMCPY_S(((CXTPString*)&str)->m_pchData + nIndex,
  232. ((CXTPString*)&str)->m_pchData + nIndex + nCount, nBytesToCopy * sizeof(TCHAR));
  233. ((CXTPString*)&str)->GetData()->nDataLength = nNewLength - nCount;
  234. }
  235. return nNewLength;
  236. #else
  237. return str.Delete(nIndex, nCount);
  238. #endif
  239. }
  240. COLORREF GetStaticFrameColor()
  241. {
  242. return GetXtremeColor(XPCOLOR_STATICFRAME);
  243. }
  244. BOOL IsRunAutomated()
  245. {
  246. return theApp.m_bRunAutomated;
  247. }