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

对话框与窗口

开发平台:

Visual C++

  1. // XTPShortcutManager.h : interface for the CXTPShortcutManager class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS 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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSHORTCUTMANAGER_H__)
  22. #define __XTPSHORTCUTMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. class CXTPPropExchange;
  28. class CXTPCommandBars;
  29. class _XTP_EXT_CLASS CXTPShortcutManagerAccel
  30. {
  31. public:
  32. CXTPShortcutManagerAccel();
  33. CXTPShortcutManagerAccel(ACCEL* pAccel);
  34. CXTPShortcutManagerAccel(const CXTPShortcutManagerAccel& accel);
  35. public:
  36. struct SHORTCUTACCEL
  37. {
  38. BYTE   fVirt;
  39. WORD   key;
  40. };
  41. public:
  42. int cmd;
  43. SHORTCUTACCEL key[2];
  44. };
  45. class _XTP_EXT_CLASS CXTPShortcutManagerAccelTable
  46. {
  47. public:
  48. CXTPShortcutManagerAccelTable();
  49. ~CXTPShortcutManagerAccelTable();
  50. public:
  51. int GetCount() const;
  52. CXTPShortcutManagerAccel* GetAt(int nIndex) const;
  53. void Add(CXTPShortcutManagerAccel accel);
  54. CXTPShortcutManagerAccel* CopyAccels() const;
  55. public:
  56. void CopyAccelTable(HACCEL hAccelTable);
  57. void CopyAccelTable(CXTPShortcutManagerAccelTable* pAccelTable);
  58. void CopyAccelTable(LPACCEL lpAccel, int nSize);
  59. public:
  60. void RemoveAll();
  61. void RemoveAt(int nIndex);
  62. protected:
  63. CArray<CXTPShortcutManagerAccel*, CXTPShortcutManagerAccel*> m_arrAccels;
  64. };
  65. //===========================================================================
  66. // Summary:
  67. //     CXTPShortcutManager is standalone class used to manipulate accelerators of frame.
  68. //===========================================================================
  69. class _XTP_EXT_CLASS CXTPShortcutManager: public CXTPCmdTarget
  70. {
  71. public:
  72. //{{AFX_CODEJOCK_PRIVATE
  73. class _XTP_EXT_CLASS CKeyNameText
  74. {
  75. public:
  76. CKeyNameText();
  77. CString Translate(UINT nKey);
  78. void SetAt(UINT uiVirtKey, LPCTSTR lpszKeyNameText);
  79. WORD Parse(LPCTSTR lpszKey);
  80. protected:
  81. CMap<WORD, WORD, CString, CString> m_mapVirtualKeys;
  82. };
  83. class _XTP_EXT_CLASS CKeyHelper
  84. {
  85. public:
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Constructs a CKeyHelper object.
  89. //-----------------------------------------------------------------------
  90. CKeyHelper(const CXTPShortcutManagerAccel* lpAccel, CXTPShortcutManager* pManager = NULL);
  91. //-------------------------------------------------------------------------
  92. // Summary:
  93. //     Destroys a CKeyHelper object, handles cleanup and deallocation
  94. //-------------------------------------------------------------------------
  95. virtual ~CKeyHelper();
  96. public:
  97. void Format (CString& str) const;
  98. CString Format(const CXTPShortcutManagerAccel::SHORTCUTACCEL* pAccel) const;
  99. int Priority();
  100. static BOOL AFX_CDECL EqualAccels(const CXTPShortcutManagerAccel* pFirst, const CXTPShortcutManagerAccel* pSecond)
  101. {
  102. return ((pFirst->key[0].fVirt | FNOINVERT) == (pSecond->key[0].fVirt | FNOINVERT)) && (pFirst->key[0].key == pSecond->key[0].key) &&
  103. ((pFirst->key[1].fVirt | FNOINVERT) == (pSecond->key[1].fVirt | FNOINVERT)) && (pFirst->key[1].key == pSecond->key[1].key);
  104. }
  105. CXTPShortcutManager* GetShortcutManager() const
  106. {
  107. return m_pManager;
  108. }
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     The GetKeyNameText function retrieves a string that represents the name of a key.
  112. // Parameters:
  113. //     uiVirtKey - virtual-key of accelerator.
  114. //-----------------------------------------------------------------------
  115. static CString AFX_CDECL GetLocalKeyNameText(UINT uiVirtKey);
  116. protected:
  117. void AddVirtKeyStr (CString& str, UINT uiVirtKey, BOOL bLast = FALSE) const;
  118. protected:
  119. const CXTPShortcutManagerAccel* m_lpAccel;
  120. CXTPShortcutManager* m_pManager;
  121. public:
  122. BOOL m_bAllowLocaleKey;
  123. };
  124. class _XTP_EXT_CLASS CKeyAssign : public CEdit
  125. {
  126. public:
  127. //-------------------------------------------------------------------------
  128. // Summary:
  129. //     Constructs a CKeyAssign object.
  130. //-------------------------------------------------------------------------
  131. CKeyAssign(CXTPShortcutManager* pManager = NULL);
  132. //-------------------------------------------------------------------------
  133. // Summary:
  134. //     Destroys a CKeyAssign object, handles cleanup and deallocation
  135. //-------------------------------------------------------------------------
  136. virtual ~CKeyAssign();
  137. public:
  138. BOOL IsKeyDefined() const;
  139. CXTPShortcutManagerAccel* GetAccel();
  140. void SetAccel(CXTPShortcutManagerAccel* pAccel);
  141. void ResetKey();
  142. protected:
  143. void SetAccelFlag(int nKey, BYTE bFlag, BOOL bOn);
  144. virtual BOOL PreTranslateMessage(MSG* pMsg);
  145. BOOL TranslateDoubleKeyShortcutsMessage(MSG* pMsg);
  146. BOOL TranslateSingleKeyShortcutsMessage(MSG* pMsg);
  147. public:
  148. BOOL m_bExtendedOnly;
  149. BOOL m_bAllowDoubleKeyShortcuts;
  150. protected:
  151. int m_nKeyDefined;
  152. CXTPShortcutManagerAccel m_accel;
  153. CKeyHelper  m_keyHelper;
  154. };
  155. //}}AFX_CODEJOCK_PRIVATE
  156. //-------------------------------------------------------------------------
  157. // Summary:
  158. //     Constructs a CXTPShortcutManager object.
  159. // Parameters:
  160. //     pCommandBars - Owner CommandBars object
  161. //-------------------------------------------------------------------------
  162. CXTPShortcutManager(CXTPCommandBars* pCommandBars);
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     Destroys a CXTPShortcutManager object, handles cleanup and deallocation.
  166. //-----------------------------------------------------------------------
  167. ~CXTPShortcutManager();
  168. public:
  169. //-----------------------------------------------------------------------
  170. // Summary:
  171. //     Retrieves shortcut text for specified command.
  172. // Parameters:
  173. //     nCmd         - Command which shortcut text need to retrieve
  174. //     strShortcut  - Shortcut text reference.
  175. // Returns:
  176. //     TRUE if shortcut found.
  177. //-----------------------------------------------------------------------
  178. virtual BOOL FindDefaultAccelerator (int nCmd, CString& strShortcut);
  179. BOOL FindDefaultFrameAccelerator (int nCmd, CString& strShortcut);
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     This method is called to retrieve text presentation of ACCEL.
  183. //     You can override this method.
  184. // Parameters:
  185. //     lpAccel - Accelerator need to format.
  186. //     pPriority - Returns priority of accelerator to be used to determine what accelerator used as default.
  187. //-----------------------------------------------------------------------
  188. virtual CString Format(CXTPShortcutManagerAccel* lpAccel, int* pPriority);
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     The GetKeyNameText function retrieves a string that represents the name of a key. Override
  192. //     this member function to provide additional functionality.
  193. // Parameters:
  194. //     uiVirtKey - virtual-key of accelerator.
  195. //-----------------------------------------------------------------------
  196. virtual CString GetKeyNameText(UINT uiVirtKey);
  197. //-----------------------------------------------------------------------
  198. // Summary:
  199. //     The OnPreviewEditKey function called to determine if user defined
  200. //     shortcut is allowed.
  201. // Parameters:
  202. //     hAccel - User pressed key.
  203. // Returns:
  204. //     TRUE if key is allowed
  205. //-----------------------------------------------------------------------
  206. virtual BOOL OnPreviewEditKey(CXTPShortcutManagerAccel* pAccel);
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     This method is called before user add new shortcut
  210. // Parameters:
  211. //     pAccel - New shortcut to add
  212. // See Also: OnBeforeRemove
  213. //-----------------------------------------------------------------------
  214. virtual BOOL OnBeforeAdd(CXTPShortcutManagerAccel* pAccel);
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     This method is called before user remove shortcut
  218. // Parameters:
  219. //     pAccel - Shortcut to be removed
  220. // See Also: OnBeforeAdd
  221. //-----------------------------------------------------------------------
  222. virtual BOOL OnBeforeRemove(CXTPShortcutManagerAccel* pAccel);
  223. public:
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //     Call this member to localize shortcut key name text.
  227. // Parameters:
  228. //     uiVirtKey - virtual-key of accelerator.
  229. //     lpszKeyNameText - New text that will be associated with virtual-key
  230. // Example:
  231. //     <code>pCommandBars->GetShortcutManager()->SetKeyNameText(VK_CONTROL, _T("Strg"));</code>
  232. //-----------------------------------------------------------------------
  233. void SetKeyNameText(UINT uiVirtKey, LPCTSTR lpszKeyNameText);
  234. //-----------------------------------------------------------------------
  235. // Summary:
  236. //     Call this member to use system localized shortcuts
  237. // Parameters:
  238. //     bSystemKey - TRUE to allow system to localize shortcuts instead of predefined shortcuts table.
  239. // Example:
  240. //     <code>pCommandBars->GetShortcutManager()->UseSystemKeyNameText(TRUE);</code>
  241. //-----------------------------------------------------------------------
  242. void UseSystemKeyNameText(BOOL bSystemKey);
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //     This method is called to enable/disable shortcuts usage
  246. // Parameters:
  247. //     bDisable - TRUE to disable shortcuts
  248. //-----------------------------------------------------------------------
  249. void DisableShortcuts(BOOL bDisable);
  250. //-----------------------------------------------------------------------
  251. // Summary:
  252. //     The TranslateAccelerator function processes accelerator keys for menu commands.
  253. // Parameters:
  254. //     lpMsg - Pointer to an MSG structure that contains message information
  255. //-----------------------------------------------------------------------
  256. BOOL TranslateAccelerator(LPMSG lpMsg);
  257. public:
  258. //-----------------------------------------------------------------------
  259. // Summary:
  260. //     Call this function to save the accelerators to the registry
  261. //     or .INI file.
  262. // Parameters:
  263. //     lpszProfileName - Points to a null-terminated string that
  264. //                       specifies the name of a section in the
  265. //                       initialization file or a key in the Windows
  266. //                       registry where state information is stored.
  267. //-----------------------------------------------------------------------
  268. void SaveShortcuts(LPCTSTR lpszProfileName);
  269. //-----------------------------------------------------------------------
  270. // Summary:
  271. //     Call this function to retrieve accelerators from the registry
  272. //     or .INI file.
  273. // Parameters:
  274. //     lpszProfileName - Points to a null-terminated string that
  275. //                       specifies the name of a section in the
  276. //                       initialization file or a key in the Windows
  277. //                       registry where state information is stored.
  278. //-----------------------------------------------------------------------
  279. void LoadShortcuts(LPCTSTR lpszProfileName);
  280. //-----------------------------------------------------------------------
  281. // Summary:
  282. //     Reads or writes this object from or to an archive.
  283. // Parameters:
  284. //     pPX    - A CXTPPropExchange object to serialize to or from.
  285. //----------------------------------------------------------------------
  286. virtual void DoPropExchange(CXTPPropExchange* pPX);
  287. //-----------------------------------------------------------------------
  288. // Summary:
  289. //     Call this member to create original accelerators
  290. // Parameters:
  291. //     nIDResource - Resource identifier of Accelerator table.
  292. //----------------------------------------------------------------------
  293. void SetAccelerators(UINT nIDResource);
  294. //-----------------------------------------------------------------------
  295. // Summary:
  296. //     Call this member to set accelerator table
  297. // Parameters:
  298. //     hAccelTable - New accelerators to be set.
  299. //----------------------------------------------------------------------
  300. void SetDefaultAccelerator(HACCEL hAccelTable);
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //     Call this member to get accelerator table
  304. // Returns:
  305. //     Accelerator table handle
  306. //----------------------------------------------------------------------
  307. virtual CXTPShortcutManagerAccelTable* GetDefaultAccelerator() const;
  308. //-----------------------------------------------------------------------
  309. // Summary:
  310. //     Call this member to get original accelerators
  311. // Parameters:
  312. //     Accelerator table handle
  313. //----------------------------------------------------------------------
  314. CXTPShortcutManagerAccelTable* GetOriginalAccelerator() const;
  315. //-----------------------------------------------------------------------
  316. // Summary:
  317. //     Call this member to reset shortcuts
  318. //----------------------------------------------------------------------
  319. virtual void Reset();
  320. public:
  321. //{{AFX_CODEJOCK_PRIVATE
  322. void CreateOriginalAccelTable();
  323. static TCHAR AFX_CDECL ToUpper(TCHAR vkTCHAR);
  324. static BOOL AFX_CDECL CompareAccelKey(TCHAR chAccel, UINT wParam);
  325. void UpdateAcellTable(LPACCEL lpAccel, int nSize);
  326. void UpdateAcellTable(CXTPShortcutManagerAccel* lpAccel, int nSize);
  327. void SerializeShortcuts(CArchive& ar);
  328. void AddShortcut(long fVirt, long key, long cmd);
  329. void AddShortcut(long cmd, LPCTSTR lpszKey);
  330. BOOL GetShortcut(int ID, CXTPShortcutManagerAccel* pAccel);
  331. BOOL ParseShortcut(CString strShortcut, CXTPShortcutManagerAccel* accel);
  332. private:
  333. BOOL ParseShortcut(CString strShortcutKey, BYTE& fVirt, WORD& key) const;
  334. BOOL ParseShortcutVirtKey(CString& strShortcutKey, int nAccel) const;
  335. BOOL IsAccelMessage(CXTPShortcutManagerAccel::SHORTCUTACCEL& accel, int nKeyState, LPMSG lpMsg) const;
  336. int GetAccelKeyState() const;
  337. //}}AFX_CODEJOCK_PRIVATE
  338. public:
  339. BOOL m_bAllowEscapeShortcut;        // TRUE to allow escape to use as shortcut
  340. BOOL m_bUseSystemKeyNameText;       // TRUE to use localized shortcuts
  341. BOOL m_bAllowDoubleKeyShortcuts;
  342. int m_nDisableShortcuts;            // Number of shortcuts that have been disabled.
  343. protected:
  344. CXTPShortcutManagerAccelTable* m_pAccelTable;               // Accelerator table
  345. CXTPShortcutManagerAccelTable* m_pOriginalAccelTable;       // Original accelerator table.
  346. CXTPCommandBars* m_pCommandBars;
  347. CKeyNameText* m_pKeyNameText;       // KeyNameText map.
  348. friend class CKeyHelper;
  349. };
  350. AFX_INLINE CXTPShortcutManagerAccelTable* CXTPShortcutManager::GetDefaultAccelerator() const {
  351. return m_pAccelTable;
  352. }
  353. AFX_INLINE CXTPShortcutManagerAccelTable* CXTPShortcutManager::GetOriginalAccelerator() const {
  354. return m_pOriginalAccelTable;
  355. }
  356. AFX_INLINE void CXTPShortcutManager::UseSystemKeyNameText(BOOL bSystemKey) {
  357. m_bUseSystemKeyNameText = bSystemKey;
  358. }
  359. #endif //#if !defined(__XTPSHORTCUTMANAGER_H__)