ExtCmdManager.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:54k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __ExtCmdManager_H)
  22. #define __ExtCmdManager_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #if (!defined __EXT_CMD_ICON_H)
  27. #include <ExtCmdIcon.h>
  28. #endif
  29. //#if (!defined __AFXMT_H__)
  30. // #include <AfxMt.h>
  31. //#endif
  32. #if (!defined __AFXTEMPL_H__)
  33. #include <AfxTempl.h>
  34. #endif
  35. #if (!defined __EXT_PMSYNCHRONIZESINK_H)
  36. #include "../Src/ExtPmSynchronizeSink.h"
  37. #endif
  38. #define __EXT_MFC_PSH_WIZARD97_OLD 0x00002000
  39. #define __EXT_MFC_PSH_WIZARD97_NEW 0x01000000
  40. #define __EXT_MFC_PSH_WIZARD97_MASK (__EXT_MFC_PSH_WIZARD97_OLD|__EXT_MFC_PSH_WIZARD97_NEW)
  41. // max text size
  42. #define __MAX_UI_ITEM_TEXT (1024)
  43. // mdi menu list commands
  44. #define __ID_MDIWNDLIST_COUNT 9
  45. #define __ID_MDIWNDLIST_FIRST AFX_IDM_FIRST_MDICHILD
  46. #define __ID_MDIWNDLIST_LAST (__ID_MDIWNDLIST_FIRST+__ID_MDIWNDLIST_COUNT-1)
  47. #define __ID_MDIWND_DLGWINDOWS (__ID_MDIWNDLIST_LAST+1)
  48. #define __MFCEXT_DEF_RARELY_USED_PERCENT 10
  49. class CExtCmdIcon;
  50. class CExtCmdItem;
  51. class CExtCmdItemUI;
  52. class CExtCmdProfile;
  53. class CExtCmdManager;
  54. class CExtPaintManager;
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CExtCmdItem
  57. // command item class
  58. class __PROF_UIS_API CExtCmdItem
  59. {
  60. public:
  61. enum e_state_t // state flags
  62. {
  63. STATE_ENABLED = 0x00000000,
  64. STATE_DISABLED = 0x00000001,
  65. STATE_CHECK = 0x00000002,
  66. STATE_RADIO = 0x00000004,
  67. STATE_INDETERMINATE = 0x00000008,
  68. STATE_BASICCMDPROP = 0x00000010,
  69. STATE_FORCE_RARELY = 0x00000020,
  70. STATE_MENUBAR_TMP = 0x00000040,
  71. STATE_CUSTOM_TOOLBAR = 0x00000080,
  72. STATE_DYNAMIC_POPUP = 0x00000100,
  73. STATE_PERSISTENT_ICON = 0x00000200,
  74. #if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  75. STATE_TEXT_FIELD = 0x00000400, // command is text field
  76. STATE_TF_NE = 0x00000800, // text field is not editable (only with STATE_TEXT_FIELD)
  77. STATE_COMBO = 0x00001000, // text field is able to drop list-box (only with STATE_TEXT_FIELD)
  78. STATE_DATE = 0x10000000, // text field is able to drop date picker (only with STATE_TEXT_FIELD)
  79. STATE_RESIZABLE = 0x00002000, // text field is resizable (only with STATE_TEXT_FIELD)
  80. #endif // (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  81. STATE_COLOR = 0x00004000, // color button
  82. STATE_UNDO_REDO = 0x20000000, // undo/redo button
  83. STATE_CHECK_BOX = 0x40000000, // check box button
  84. STATE_RADIO_BOX = 0x80000000, // radio box button
  85. STATE_MCB_DEFAULT = 0x00008000, // "default" button on color menu
  86. STATE_MCB_CUSTOM = 0x00010000, // "custom" button on color menu
  87. STATE_SEPARATED_DROPDOWN = 0x00020000, // sepatated button in toolbar
  88. STATE_AUTOCHANGE_ID = 0x00040000, // separated button with auto-changable command ID
  89. STATE_NO_ROTATE_VL = 0x00080000, // do not rotate in vertical layout
  90. STATE_CANNOT_HIDE = 0x00100000, // can not be hidden via toolbar buttons menu
  91. STATE_CTRL_VIS_VL = 0x00200000, // control is visible in vertical layout
  92. STATE_AUTO_IS_AUTOMATED = 0x00400000, // reserved for Prof-Auto (command is allocated by automation calls)
  93. STATE_AUTO_CAN_REMOVE = 0x00800000, // reserved for Prof-Auto (command can be removed via automation calls)
  94. STATE_AUTO_CONSTRUCTOR = 0,          // reserved for Prof-Auto
  95. STATE_AUTO_INITIAL = (STATE_AUTO_IS_AUTOMATED|STATE_AUTO_CAN_REMOVE), // reserved for Prof-Auto
  96. STATE_AUTO_MASK = (STATE_AUTO_IS_AUTOMATED|STATE_AUTO_CAN_REMOVE), // reserved for Prof-Auto
  97. STATE_FF_DESIGN_COMMAND = 0x01000000, // reserved for Frame Features
  98. STATE_FF_TOOLBAR_COMMAND = 0x02000000, // reserved for Frame Features
  99. STATE_FF_SCROLLER = 0x04000000, // reserved for Frame Features
  100. STATE_FF_HIDE_IN_ALL_CMDS = 0x08000000, // reserved for Frame Features
  101. STATE_CLEAN_MASK =
  102. (STATE_DYNAMIC_POPUP
  103. #if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  104. |STATE_TEXT_FIELD|STATE_COMBO|STATE_DATE
  105. #endif // (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  106. |STATE_COLOR|STATE_UNDO_REDO|STATE_CHECK_BOX|STATE_RADIO_BOX|STATE_FF_SCROLLER),
  107. }; // enum e_state_t
  108. enum e_ex_state_t // state flags
  109. {
  110. EX_STATE_TEAR_OFF = 0x00000001,
  111. EX_STATE_USER_DEFINED_30 = 0x00000002,
  112. EX_STATE_USER_DEFINED_29 = 0x00000004,
  113. EX_STATE_USER_DEFINED_28 = 0x00000008,
  114. EX_STATE_USER_DEFINED_27 = 0x00000010,
  115. EX_STATE_USER_DEFINED_26 = 0x00000020,
  116. EX_STATE_USER_DEFINED_25 = 0x00000040,
  117. EX_STATE_USER_DEFINED_24 = 0x00000080,
  118. EX_STATE_USER_DEFINED_23 = 0x00000100,
  119. EX_STATE_USER_DEFINED_22 = 0x00000200,
  120. EX_STATE_USER_DEFINED_21 = 0x00000400,
  121. EX_STATE_USER_DEFINED_20 = 0x00000800,
  122. EX_STATE_USER_DEFINED_19 = 0x00001000,
  123. EX_STATE_USER_DEFINED_18 = 0x00002000,
  124. EX_STATE_USER_DEFINED_17 = 0x00004000,
  125. EX_STATE_USER_DEFINED_16 = 0x00008000,
  126. EX_STATE_USER_DEFINED_15 = 0x00010000,
  127. EX_STATE_USER_DEFINED_14 = 0x00020000,
  128. EX_STATE_USER_DEFINED_13 = 0x00040000,
  129. EX_STATE_USER_DEFINED_12 = 0x00080000,
  130. EX_STATE_USER_DEFINED_11 = 0x00100000,
  131. EX_STATE_USER_DEFINED_10 = 0x00200000,
  132. EX_STATE_USER_DEFINED_09 = 0x00400000,
  133. EX_STATE_USER_DEFINED_08 = 0x00800000,
  134. EX_STATE_USER_DEFINED_07 = 0x01000000,
  135. EX_STATE_USER_DEFINED_06 = 0x02000000,
  136. EX_STATE_USER_DEFINED_05 = 0x04000000,
  137. EX_STATE_USER_DEFINED_04 = 0x08000000,
  138. EX_STATE_USER_DEFINED_03 = 0x10000000,
  139. EX_STATE_USER_DEFINED_02 = 0x20000000,
  140. EX_STATE_USER_DEFINED_01 = 0x40000000,
  141. EX_STATE_USER_DEFINED_00 = 0x80000000,
  142. }; // enum e_ex_state_t
  143. CExtCmdProfile * m_pProfile;
  144. UINT m_nCmdID;
  145. int m_nIconIdx;
  146. DWORD m_dwStateFlags, m_dwExStateFlags;
  147. CExtSafeString
  148. m_sMenuText,m_sToolbarText,
  149. m_sTipTool,m_sTipStatus,
  150. m_sAccelText
  151. ;
  152. LPARAM m_nLParamUserData;
  153. #if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  154. INT m_nTextFieldWidth;
  155. INT m_nDropDownWidth; // (-1) - auto calc, (-2) - same as button area
  156. INT m_nDropDownHeightMax;
  157. #endif // (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  158. protected:
  159. UINT m_nUsageTickCount;
  160. virtual void AssignFromOther( const CExtCmdItem & other );
  161. virtual void ReplaceFromOtherNonEmpty( const CExtCmdItem & other );
  162. virtual void AnalyzeGlobalUsageOverflow();
  163. public:
  164. // construction/destruction/assignment
  165. CExtCmdItem(
  166. UINT nCmdID = IDC_STATIC
  167. );
  168. CExtCmdItem( const CExtCmdItem & other );
  169. virtual ~CExtCmdItem();
  170. CExtCmdItem & operator = ( const CExtCmdItem & other );
  171. //clean tips
  172. virtual void TipsClean();
  173. // load tips
  174. virtual bool TipsLoad();
  175. // upload more full parameters from other
  176. virtual void UpdateMoreExact( const CExtCmdItem & other );
  177. // state retrieve/update
  178. virtual void StateSetBasic( bool bOn = true )
  179. {
  180. if( bOn )
  181. m_dwStateFlags |= STATE_BASICCMDPROP;
  182. else
  183. m_dwStateFlags &= ~STATE_BASICCMDPROP;
  184. }
  185. virtual bool StateIsBasic() const;
  186. virtual bool StateIsRarelyUsed() const;
  187. virtual void StateForceRarely( bool bOn = true )
  188. {
  189. if( bOn )
  190. m_dwStateFlags |= STATE_FORCE_RARELY;
  191. else
  192. m_dwStateFlags &= ~STATE_FORCE_RARELY;
  193. }
  194. virtual bool StateIsForceRarely() const;
  195. virtual void StateEnable( bool bOn = true )
  196. {
  197. if( bOn )
  198. m_dwStateFlags &= ~STATE_DISABLED;
  199. else
  200. m_dwStateFlags |= STATE_DISABLED;
  201. }
  202. virtual bool StateIsEnable() const
  203. {
  204. bool bOn =
  205. (m_dwStateFlags&STATE_DISABLED)
  206. ? false : true;
  207. return bOn;
  208. }
  209. virtual void StateSetCheck( bool bOn = true )
  210. {
  211. m_dwStateFlags &=
  212. ~(STATE_RADIO|STATE_CHECK|STATE_INDETERMINATE);
  213. if( bOn )
  214. m_dwStateFlags |= STATE_CHECK;
  215. }
  216. virtual bool StateGetCheck() const
  217. {
  218. bool bOn =
  219. (m_dwStateFlags&STATE_CHECK)
  220. ? true : false;
  221. return bOn;
  222. }
  223. virtual void StateSetRadio( bool bOn = true )
  224. {
  225. m_dwStateFlags &=
  226. ~(STATE_RADIO|STATE_CHECK|STATE_INDETERMINATE);
  227. if( bOn )
  228. m_dwStateFlags |= STATE_RADIO;
  229. }
  230. virtual bool StateGetRadio() const
  231. {
  232. bool bOn =
  233. (m_dwStateFlags&STATE_RADIO)
  234. ? true : false;
  235. return bOn;
  236. }
  237. virtual void StateSetIndeterminate( bool bOn = true )
  238. {
  239. m_dwStateFlags &=
  240. ~(STATE_RADIO|STATE_CHECK|STATE_INDETERMINATE);
  241. if( bOn )
  242. m_dwStateFlags |= STATE_INDETERMINATE;
  243. }
  244. virtual bool StateGetIndeterminate() const
  245. {
  246. bool bIndeterminate =
  247. (m_dwStateFlags&STATE_INDETERMINATE)
  248. ? true : false;
  249. return bIndeterminate;
  250. }
  251. virtual void StateSetMenubarTemp( bool bOn = true )
  252. {
  253. m_dwStateFlags &= ~(STATE_MENUBAR_TMP);
  254. if( bOn )
  255. m_dwStateFlags |= STATE_MENUBAR_TMP;
  256. }
  257. virtual bool StateIsMenubarTemp() const
  258. {
  259. bool bOn =
  260. (m_dwStateFlags&STATE_MENUBAR_TMP)
  261. ? true : false;
  262. return bOn;
  263. }
  264. virtual void StateSetCustomToolbar( bool bOn = true )
  265. {
  266. m_dwStateFlags &= ~(STATE_CUSTOM_TOOLBAR);
  267. if( bOn )
  268. m_dwStateFlags |= STATE_CUSTOM_TOOLBAR;
  269. }
  270. virtual bool StateIsCustomToolbar() const
  271. {
  272. bool bOn =
  273. (m_dwStateFlags&STATE_CUSTOM_TOOLBAR)
  274. ? true : false;
  275. return bOn;
  276. }
  277. virtual void StateSetDynamicPopup( bool bOn = true )
  278. {
  279. m_dwStateFlags &= ~(STATE_DYNAMIC_POPUP);
  280. if( bOn )
  281. m_dwStateFlags |= STATE_DYNAMIC_POPUP;
  282. }
  283. virtual bool StateIsDynamicPopup() const
  284. {
  285. bool bOn =
  286. (m_dwStateFlags&STATE_DYNAMIC_POPUP)
  287. ? true : false;
  288. return bOn;
  289. }
  290. virtual void StateSetPersistentIcon( bool bOn = true )
  291. {
  292. m_dwStateFlags &= ~(STATE_PERSISTENT_ICON);
  293. if( bOn )
  294. m_dwStateFlags |= STATE_PERSISTENT_ICON;
  295. }
  296. virtual bool StateIsPersistentIcon() const
  297. {
  298. bool bOn =
  299. (m_dwStateFlags&STATE_PERSISTENT_ICON)
  300. ? true : false;
  301. return bOn;
  302. }
  303. #if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  304. virtual void StateSetTextField( bool bOn = true )
  305. {
  306. m_dwStateFlags &= ~(STATE_TEXT_FIELD|STATE_COMBO|STATE_DATE);
  307. if( bOn )
  308. m_dwStateFlags |= STATE_TEXT_FIELD;
  309. }
  310. virtual bool StateIsTextField() const
  311. {
  312. bool bOn =
  313. ((m_dwStateFlags&STATE_TEXT_FIELD) == STATE_TEXT_FIELD)
  314. ? true : false;
  315. return bOn;
  316. }
  317. virtual void StateSetTextFieldNotEditable( bool bOn = true )
  318. {
  319. m_dwStateFlags &= ~(STATE_TF_NE);
  320. if( bOn )
  321. m_dwStateFlags |= STATE_TF_NE;
  322. }
  323. virtual bool StateIsTextFieldNotEditable() const
  324. {
  325. bool bOn =
  326. ((m_dwStateFlags&STATE_TF_NE) != 0)
  327. ? true : false;
  328. return bOn;
  329. }
  330. virtual void StateSetCombo( bool bOn = true )
  331. {
  332. m_dwStateFlags &= ~(STATE_TEXT_FIELD|STATE_COMBO|STATE_DATE);
  333. if( bOn )
  334. m_dwStateFlags |= STATE_TEXT_FIELD|STATE_COMBO;
  335. }
  336. virtual bool StateIsCombo() const
  337. {
  338. bool bOn =
  339. ( (m_dwStateFlags&(STATE_TEXT_FIELD|STATE_COMBO)) == (STATE_TEXT_FIELD|STATE_COMBO) )
  340. ? true : false;
  341. return bOn;
  342. }
  343. virtual void StateSetDate( bool bOn = true )
  344. {
  345. m_dwStateFlags &= ~(STATE_TEXT_FIELD|STATE_COMBO|STATE_DATE);
  346. if( bOn )
  347. m_dwStateFlags |= STATE_TEXT_FIELD|STATE_DATE;
  348. }
  349. virtual bool StateIsDate() const
  350. {
  351. bool bOn =
  352. ( (m_dwStateFlags&(STATE_TEXT_FIELD|STATE_DATE)) == (STATE_TEXT_FIELD|STATE_DATE) )
  353. ? true : false;
  354. return bOn;
  355. }
  356. virtual void StateSetResizable( bool bOn = true )
  357. {
  358. m_dwStateFlags &= ~(STATE_RESIZABLE);
  359. if( bOn )
  360. m_dwStateFlags |= STATE_RESIZABLE;
  361. }
  362. virtual bool StateIsResizable() const
  363. {
  364. bool bOn =
  365. (m_dwStateFlags&STATE_RESIZABLE)
  366. ? true : false;
  367. return bOn;
  368. }
  369. #endif // (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  370. virtual void StateSetColor( bool bOn = true )
  371. {
  372. m_dwStateFlags &= ~(STATE_COLOR);
  373. if( bOn )
  374. m_dwStateFlags |= STATE_COLOR;
  375. }
  376. virtual bool StateIsColor() const
  377. {
  378. bool bOn =
  379. (m_dwStateFlags&STATE_COLOR)
  380. ? true : false;
  381. return bOn;
  382. }
  383. virtual void StateSetUndoRedo( bool bOn = true )
  384. {
  385. m_dwStateFlags &= ~(STATE_UNDO_REDO);
  386. if( bOn )
  387. m_dwStateFlags |= STATE_UNDO_REDO;
  388. }
  389. virtual bool StateIsUndoRedo() const
  390. {
  391. bool bOn =
  392. (m_dwStateFlags&STATE_UNDO_REDO)
  393. ? true : false;
  394. return bOn;
  395. }
  396. virtual void StateSetCheckBox( bool bOn = true )
  397. {
  398. m_dwStateFlags &= ~(STATE_CHECK_BOX);
  399. if( bOn )
  400. m_dwStateFlags |= STATE_CHECK_BOX;
  401. }
  402. virtual bool StateIsCheckBox() const
  403. {
  404. bool bOn =
  405. (m_dwStateFlags&STATE_CHECK_BOX)
  406. ? true : false;
  407. return bOn;
  408. }
  409. virtual void StateSetRadioBox( bool bOn = true )
  410. {
  411. m_dwStateFlags &= ~(STATE_RADIO_BOX);
  412. if( bOn )
  413. m_dwStateFlags |= STATE_RADIO_BOX;
  414. }
  415. virtual bool StateIsRadioBox() const
  416. {
  417. bool bOn =
  418. (m_dwStateFlags&STATE_RADIO_BOX)
  419. ? true : false;
  420. return bOn;
  421. }
  422. virtual void StateSetColorBtnDefault( bool bOn = true )
  423. {
  424. m_dwStateFlags &= ~(STATE_MCB_DEFAULT);
  425. if( bOn )
  426. m_dwStateFlags |= STATE_MCB_DEFAULT;
  427. }
  428. virtual bool StateIsColorBtnDefault() const
  429. {
  430. bool bOn =
  431. (m_dwStateFlags&STATE_MCB_DEFAULT)
  432. ? true : false;
  433. return bOn;
  434. }
  435. virtual void StateSetColorBtnCustom( bool bOn = true )
  436. {
  437. m_dwStateFlags &= ~(STATE_MCB_CUSTOM);
  438. if( bOn )
  439. m_dwStateFlags |= STATE_MCB_CUSTOM;
  440. }
  441. virtual bool StateIsColorBtnCustom() const
  442. {
  443. bool bOn =
  444. (m_dwStateFlags&STATE_MCB_CUSTOM)
  445. ? true : false;
  446. return bOn;
  447. }
  448. virtual void StateSetSeparatedDD( bool bOn = true )
  449. {
  450. m_dwStateFlags &= ~(STATE_SEPARATED_DROPDOWN);
  451. if( bOn )
  452. m_dwStateFlags |= STATE_SEPARATED_DROPDOWN;
  453. }
  454. virtual bool StateIsSeparatedDD() const
  455. {
  456. bool bOn =
  457. (m_dwStateFlags&STATE_SEPARATED_DROPDOWN)
  458. ? true : false;
  459. return bOn;
  460. }
  461. virtual void StateSetAutochangeID( bool bOn = true )
  462. {
  463. m_dwStateFlags &= ~(STATE_AUTOCHANGE_ID);
  464. if( bOn )
  465. m_dwStateFlags |= STATE_AUTOCHANGE_ID;
  466. }
  467. virtual bool StateIsAutochangeID() const
  468. {
  469. bool bOn =
  470. (m_dwStateFlags&STATE_AUTOCHANGE_ID)
  471. ? true : false;
  472. return bOn;
  473. }
  474. virtual void StateSetNoRotateVL( bool bOn = true )
  475. {
  476. m_dwStateFlags &= ~(STATE_NO_ROTATE_VL);
  477. if( bOn )
  478. m_dwStateFlags |= STATE_NO_ROTATE_VL;
  479. }
  480. virtual bool StateIsNoRotateVL() const
  481. {
  482. bool bOn =
  483. (m_dwStateFlags&STATE_NO_ROTATE_VL)
  484. ? true : false;
  485. return bOn;
  486. }
  487. virtual void StateSetCannotHide( bool bOn = true )
  488. {
  489. m_dwStateFlags &= ~(STATE_CANNOT_HIDE);
  490. if( bOn )
  491. m_dwStateFlags |= STATE_CANNOT_HIDE;
  492. }
  493. virtual bool StateIsCannotHide() const
  494. {
  495. bool bOn =
  496. (m_dwStateFlags&STATE_CANNOT_HIDE)
  497. ? true : false;
  498. return bOn;
  499. }
  500. virtual void StateSetCtrlVisibleVertically( bool bOn = true )
  501. {
  502. m_dwStateFlags &= ~(STATE_CTRL_VIS_VL);
  503. if( bOn )
  504. m_dwStateFlags |= STATE_CTRL_VIS_VL;
  505. }
  506. virtual bool StateIsCtrlVisibleVertically() const
  507. {
  508. bool bOn =
  509. (m_dwStateFlags&STATE_CTRL_VIS_VL)
  510. ? true : false;
  511. return bOn;
  512. }
  513. virtual void StateSetTearOff( bool bOn = true )
  514. {
  515. m_dwExStateFlags &= ~(EX_STATE_TEAR_OFF);
  516. if( bOn )
  517. m_dwExStateFlags |= EX_STATE_TEAR_OFF;
  518. }
  519. virtual bool StateIsTearOff() const
  520. {
  521. bool bOn =
  522. (m_dwExStateFlags&EX_STATE_TEAR_OFF)
  523. ? true : false;
  524. return bOn;
  525. }
  526. // update command UI
  527. virtual bool DoUpdateCmdUI(
  528. CCmdTarget * pCmdTarget,
  529. UINT nIndex = 0
  530. );
  531. // deliver to window
  532. virtual bool Deliver(
  533. HWND hWndCmdTarget,
  534. bool bSend = false
  535. );
  536. virtual bool Deliver(
  537. CWnd * pWndCmdTarget,
  538. bool bSend = false
  539. );
  540. virtual bool Deliver(
  541. CControlBar * pWndCmdSource,
  542. bool bSend = false
  543. );
  544. // usage statistics
  545. virtual UINT GetUsageTickCount() const;
  546. virtual UINT GetUsagePercent() const;
  547. virtual void IncrementUsageCount();
  548. virtual void ResetUsageStatistics();
  549. virtual UINT GetProfileTickCount() const;
  550. virtual UINT GetProfileRarelyPercent() const;
  551. virtual void SetProfileRarelyPercent(
  552. UINT nRarelyPercent
  553. );
  554. virtual void OnGlobalPaintManagerChanged();
  555. virtual void OnSysColorChange(
  556. CExtPaintManager * pPM
  557. );
  558. virtual void OnSettingChange(
  559. CExtPaintManager * pPM,
  560. UINT uFlags,
  561. __EXT_MFC_SAFE_LPCTSTR lpszSection
  562. );
  563. virtual void OnDisplayChange(
  564. CExtPaintManager * pPM,
  565. INT nDepthBPP,
  566. CPoint ptSizes
  567. );
  568. virtual void OnThemeChanged(
  569. CExtPaintManager * pPM,
  570. WPARAM wParam,
  571. LPARAM lParam
  572. );
  573. // get the text for toolbars list box in a customize form
  574. virtual CExtSafeString OnGetToolBarCustomizeName();
  575. // get the command name for display in
  576. // the customize from's category command list
  577. virtual CExtSafeString OnGetCustomizeScriptName();
  578. // get the command description text for display in
  579. // the customize from's description area
  580. virtual CExtSafeString OnGetCustomizeCommandDescription();
  581. protected:
  582. virtual bool OnQueryStateSerializationNecessity() const;
  583. friend class CExtCmdManager;
  584. friend class CExtCmdProfile;
  585. }; // class CExtCmdItem
  586. /////////////////////////////////////////////////////////////////////////////
  587. // CExtCmdItemUI
  588. // command UI update class
  589. class __PROF_UIS_API CExtCmdItemUI : public CCmdUI
  590. {
  591. CExtCmdItem * m_pCmd;
  592. public:
  593. CExtCmdItemUI(
  594. CExtCmdItem * pCmd,
  595. int nIndexMax = 0
  596. );
  597. // operations to do in ON_UPDATE_COMMAND_UI
  598. virtual void Enable(
  599. BOOL bOn = TRUE
  600. );
  601. virtual void SetCheck(
  602. int nCheck = 1 // 0, 1 or 2 (indeterminate)
  603. );
  604. virtual void SetRadio(
  605. BOOL bOn = TRUE
  606. );
  607. virtual void SetText(
  608. __EXT_MFC_SAFE_LPCTSTR lpszText
  609. );
  610. }; // class CExtCmdItemUI
  611. /////////////////////////////////////////////////////////////////////////////
  612. // CExtCmdProfile
  613. // command profile class
  614. class __PROF_UIS_API CExtCmdProfile
  615. {
  616. public:
  617. typedef struct tag_MFC_TOOLBAR_RESOURCE_DATA
  618. {
  619. WORD wVersion;
  620. WORD wWidth;
  621. WORD wHeight;
  622. WORD wItemCount;
  623. WORD * items()
  624. {
  625. ASSERT( this != NULL );
  626. return (LPWORD)( this + 1 );
  627. }
  628. } MFC_TOOLBAR_RESOURCE_DATA, * LP_MFC_TOOLBAR_RESOURCE_DATA;
  629. class __PROF_UIS_API MFC_TOOLBAR_LOADER
  630. {
  631. LPUINT m_pCommands, m_pButtons;
  632. INT m_nCountCommands, m_nCountButtons;
  633. COLORREF m_clrBmpTransparent;
  634. CExtBitmap m_bmp;
  635. CSize m_sizeButton;
  636. WORD m_nVersion;
  637. public:
  638. MFC_TOOLBAR_LOADER(
  639. HINSTANCE hInstResourceCommands,
  640. HRSRC hRsrcCommands,
  641. HINSTANCE hInstResourceBitmap,
  642. HRSRC hRsrcCommandsBitmap,
  643. COLORREF clrBmpTransparent = RGB(192,192,192)
  644. );
  645. ~MFC_TOOLBAR_LOADER();
  646. WORD GetVersion() const;
  647. INT IsEmpty() const;
  648. INT GetCommandCount() const;
  649. INT GetButtonCount() const;
  650. COLORREF GetTransparentColor() const;
  651. UINT GetCommandIdAt( INT nCommandIdx ) const;
  652. UINT GetButtonIdAt( INT nButtonIdx ) const;
  653. UINT ExtractButtonData(
  654. INT nButtonIdx,
  655. CExtCmdIcon & icon
  656. ) const;
  657. void GetCmdArray(
  658. LPUINT * ppCmdArray,
  659. LPINT pCmdCount = NULL
  660. ) const;
  661. }; // class MFC_TOOLBAR_LOADER
  662. CExtSafeString m_sName;
  663. UINT m_nRarelyPercent; // values 0..100
  664. UINT m_nTotalTickCount;
  665. typedef
  666. CMap < UINT, UINT, CExtCmdItem *, CExtCmdItem * >
  667. cmd_container_t;
  668. typedef
  669. CArray < CExtCmdIcon *, CExtCmdIcon * >
  670. icon_container_t;
  671. cmd_container_t m_cmds;
  672. icon_container_t m_icons;
  673. LPARAM m_nLParamUserData;
  674. CExtCmdProfile(
  675. __EXT_MFC_SAFE_LPCTSTR sName = NULL
  676. );
  677. CExtCmdProfile(
  678. const CExtCmdProfile & other
  679. );
  680. virtual ~CExtCmdProfile();
  681. CExtCmdProfile & operator = (
  682. const CExtCmdProfile & other
  683. );
  684. // setup single command
  685. virtual bool CmdSetup(
  686. const CExtCmdItem & _cmd,
  687. bool bReplaceOld = false, // but force set images anywhere if was empty
  688. bool * pbWasAddedNew = NULL
  689. );
  690. // remove single command
  691. virtual bool CmdRemove(
  692. UINT nCmdID,
  693. bool * pbWasRemoved = NULL
  694. );
  695. // remove all commands
  696. virtual void CmdRemoveAll();
  697. // remove all commands by state mask
  698. virtual void CmdRemoveByMask(
  699. DWORD dwMask,
  700. DWORD dwExMask = 0,
  701. bool bAllBitsOnly = false,
  702. bool bExAllBitsOnly = false
  703. );
  704. // alloc command
  705. virtual CExtCmdItem * CmdAllocPtr(
  706. UINT nCmdID = 0 // 0 means any free in avail range
  707. );
  708. // get command
  709. virtual CExtCmdItem * CmdGetPtr(
  710. UINT nCmdID
  711. );
  712. // assign icon to command
  713. virtual bool CmdSetIcon(
  714. UINT nCmdID,
  715. const CExtCmdIcon * pCmdIcon, // if NULL or empty - remove
  716. bool bUseCmdIconObject
  717. );
  718. bool CmdSetIcon(
  719. UINT nCmdID,
  720. const CExtCmdIcon & cmdIcon // if empty - remove
  721. );
  722. bool CmdSetIcon(
  723. UINT nCmdID,
  724. const CExtBitmap & _bitmap, // if empty - remove
  725. COLORREF clrTransparent = RGB(0,0,0),
  726. LPCRECT pRectBitmapSrc = NULL
  727. );
  728. bool CmdSetIcon(
  729. UINT nCmdID,
  730. HICON hIcon, // if NULL - remove
  731. bool bCopyIcon = true
  732. );
  733. // get command icon (if command and its icon exist)
  734. virtual CExtCmdIcon * CmdGetIconPtr(
  735. UINT nCmdID
  736. );
  737. const CExtCmdIcon * CmdGetIconPtr(
  738. UINT nCmdID
  739. ) const;
  740. CExtCmdIcon & CmdGetIcon(
  741. UINT nCmdID
  742. );
  743. const CExtCmdIcon & CmdGetIcon(
  744. UINT nCmdID
  745. ) const;
  746. // is command registered
  747. virtual bool CmdIsRegistered(
  748. UINT nCmdID
  749. );
  750. // update commands collection from menu handle
  751. virtual bool UpdateFromMenu(
  752. HMENU hMenu,
  753. bool bReplaceOld = false,
  754. bool bRecursive = true,
  755. bool bLoadTips = true
  756. );
  757. // update commands collection from menu resurce
  758. virtual bool UpdateFromMenu(
  759. UINT nResourceID,
  760. bool bReplaceOld = false,
  761. bool bLoadTips = true
  762. );
  763. // update commands collection from toolbar wnd
  764. virtual bool UpdateFromToolBar(
  765. CToolBar & bar,
  766. bool bReplaceOld = false, // but force set images anywhere if was empty
  767. bool bLoadTips = true
  768. );
  769. // update commands collection from toolbar resource
  770. virtual bool UpdateFromToolBar(
  771. __EXT_MFC_SAFE_LPCTSTR strResourceID,
  772. LPUINT * ppCmdArray = NULL,
  773. LPINT pCmdCount = NULL,
  774. bool bReplaceOld = false, // but force set images anywhere if was empty
  775. bool bLoadTips = true,
  776. COLORREF clrBmpTransparent = RGB(192,192,192)
  777. );
  778. // set list of commands (up to (UINT)0) as basic or non basic
  779. virtual bool SetBasicCommands(
  780. UINT * pCommands,
  781. bool bOn = true
  782. );
  783. // save/load command manager state
  784. virtual bool SerializeState(
  785. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  786. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  787. bool bSave,
  788. HKEY hKeyRoot = HKEY_CURRENT_USER,
  789. bool bEnableThrowExceptions = false
  790. );
  791. virtual bool SerializeState(
  792. CArchive & ar,
  793. bool bEnableThrowExceptions = false
  794. );
  795. virtual void OnGlobalPaintManagerChanged();
  796. virtual void OnSysColorChange(
  797. CExtPaintManager * pPM
  798. );
  799. virtual void OnSettingChange(
  800. CExtPaintManager * pPM,
  801. UINT uFlags,
  802. __EXT_MFC_SAFE_LPCTSTR lpszSection
  803. );
  804. virtual void OnDisplayChange(
  805. CExtPaintManager * pPM,
  806. INT nDepthBPP,
  807. CPoint ptSizes
  808. );
  809. virtual void OnThemeChanged(
  810. CExtPaintManager * pPM,
  811. WPARAM wParam,
  812. LPARAM lParam
  813. );
  814. virtual void ResetUsageStatistics();
  815. protected:
  816. virtual void AssignFromOther(
  817. const CExtCmdProfile & other
  818. );
  819. void _RemoveAllCmdsImpl();
  820. void _RemoveAllIconsImpl();
  821. virtual CExtCmdItem * OnCreateCmdItem( const CExtCmdItem & _cmd );
  822. }; // class CExtCmdProfile
  823. /////////////////////////////////////////////////////////////////////////////
  824. // CExtCmdManager
  825. // command manager class
  826. class __PROF_UIS_API CExtCmdManager
  827. {
  828. public:
  829. // for compatibility with old versions
  830. typedef CExtCmdIcon icon_t;
  831. typedef CExtCmdItem cmd_t;
  832. typedef CExtCmdItemUI cmd_ui_t;
  833. typedef CExtCmdProfile cmd_profile_t;
  834. static inline bool IsCommand(UINT nCmdID)
  835. {
  836. //if( ((INT)nCmdID) <= 0 )
  837. if( nCmdID == 0
  838. || ((INT)nCmdID) <= ((INT)(-1))
  839. )
  840. return false;
  841. return true;
  842. }
  843. static inline bool IsSystemCommand( UINT nCmd )
  844. {
  845. bool bSystemCommand =
  846. (nCmd >= 0xF000 && nCmd < 0xF1F0) ?
  847. true : false;
  848. return bSystemCommand;
  849. }
  850. static inline bool IsAfxOleCommand( UINT nCmd )
  851. {
  852. if( ID_OLE_VERB_FIRST <= nCmd
  853. && nCmd <= ID_OLE_VERB_LAST
  854. )
  855. return true;
  856. return false;
  857. }
  858. static inline bool IsAfxMdiWindowsCommand( UINT nCmd )
  859. {
  860. if( ( __ID_MDIWNDLIST_FIRST <= nCmd
  861. && nCmd <= __ID_MDIWNDLIST_LAST )
  862. || nCmd == __ID_MDIWND_DLGWINDOWS
  863. )
  864. return true;
  865. return false;
  866. }
  867. static inline bool IsAfxFileMruCommand( UINT nCmd )
  868. {
  869. if( ID_FILE_MRU_FIRST <= nCmd
  870. && nCmd <= ID_FILE_MRU_LAST
  871. )
  872. return true;
  873. return false;
  874. }
  875. static inline bool IsForceBasicCommand( UINT nCmd )
  876. {
  877. if( IsAfxMdiWindowsCommand( nCmd )
  878. || IsAfxFileMruCommand( nCmd )
  879. || IsSystemCommand( nCmd )
  880. || IsAfxOleCommand( nCmd )
  881. )
  882. return true;
  883. return false;
  884. }
  885. static inline bool IsForceRarelyCommand( UINT nCmd )
  886. {
  887. nCmd;
  888. return false;
  889. }
  890. static inline bool IsCommandNeedsSpecUpdate( UINT nCmd )
  891. {
  892. if( IsSystemCommand( nCmd )
  893. || IsAfxMdiWindowsCommand( nCmd )
  894. )
  895. return true;
  896. return false;
  897. }
  898. static bool g_bDisableCmdIfNoHandler;
  899. private:
  900. typedef
  901. CExtSafeMapStringToPtr
  902. profile_container_t;
  903. profile_container_t m_profiles;
  904. typedef
  905. CMap< HWND, HWND, CExtCmdProfile *, CExtCmdProfile *& >
  906. profile_wnd_container_t;
  907. profile_wnd_container_t m_profile_wnds;
  908. void _RemoveAllProfilesImpl();
  909. void _ProfileGetWndListImpl(
  910. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  911. CList < HWND, HWND & > & list
  912. );
  913. void _ProfileGetWndListImpl(
  914. CExtCmdProfile * pProfile,
  915. CList < HWND, HWND & > & list
  916. );
  917. //CCriticalSection m_cs;
  918. public:
  919. // global auto-pointer class for CExtCmdManager
  920. class __PROF_UIS_API CExtCmdManagerAutoPtr
  921. {
  922. CExtCmdManager * m_pCmdManager;
  923. static volatile DWORD g_dwVersion;
  924. public:
  925. CExtCmdManagerAutoPtr();
  926. virtual ~CExtCmdManagerAutoPtr();
  927. // command manager instance access
  928. CExtCmdManager * operator -> ();
  929. // Prof-UIS version info
  930. static DWORD GetVersionDWORD(
  931. bool bForSerialization = false
  932. );
  933. static __EXT_MFC_SAFE_LPCTSTR GetVersionString(
  934. CExtSafeString & strBuff,
  935. __EXT_MFC_SAFE_TCHAR tchrSeparator
  936. );
  937. static __EXT_MFC_SAFE_LPCTSTR GetVersionString(
  938. CExtSafeString & strBuff
  939. );
  940. void OnGlobalPaintManagerChanged();
  941. void OnSysColorChange(
  942. CExtPaintManager * pPM,
  943. CWnd * pWndNotifySrc
  944. );
  945. void OnSettingChange(
  946. CExtPaintManager * pPM,
  947. CWnd * pWndNotifySrc,
  948. UINT uFlags,
  949. __EXT_MFC_SAFE_LPCTSTR lpszSection
  950. );
  951. void OnDisplayChange(
  952. CExtPaintManager * pPM,
  953. CWnd * pWndNotifySrc,
  954. INT nDepthBPP,
  955. CPoint ptSizes
  956. );
  957. void OnThemeChanged(
  958. CExtPaintManager * pPM,
  959. CWnd * pWndNotifySrc,
  960. WPARAM wParam,
  961. LPARAM lParam
  962. );
  963. }; // class CExtCmdManagerAutoPtr
  964. public:
  965. // construction/destruction
  966. CExtCmdManager();
  967. virtual ~CExtCmdManager();
  968. public:
  969. #define __EXTMFC_DEF_PROFILE_NAME _T("default")
  970. // setup single profile
  971. bool ProfileSetup(
  972. __EXT_MFC_SAFE_LPCTSTR sProfileName = NULL,
  973. HWND hProfileWnd = NULL,
  974. CExtCmdProfile * pNewProfileInstance = NULL
  975. );
  976. // get profile
  977. CExtCmdProfile * ProfileGetPtr(
  978. __EXT_MFC_SAFE_LPCTSTR sProfileName = NULL
  979. );
  980. // setup profile window
  981. bool ProfileWndAdd(
  982. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  983. HWND hProfileWnd
  984. );
  985. // remove profile window
  986. bool ProfileWndRemove(
  987. HWND hProfileWnd,
  988. bool bRemoveProfileIfLastHWND = false,
  989. bool * p_bProfileWasRemoved = NULL
  990. );
  991. // remove all profile windows
  992. int ProfileWndRemoveAll(
  993. __EXT_MFC_SAFE_LPCTSTR sProfileName
  994. );
  995. // get profile window list
  996. void ProfileGetWndList(
  997. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  998. CList < HWND, HWND & > & list
  999. );
  1000. // remove profile from command manager
  1001. bool ProfileDestroy(
  1002. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1003. bool bDestroyIfHasWindows = false
  1004. );
  1005. // rename profile
  1006. bool ProfileRename(
  1007. __EXT_MFC_SAFE_LPCTSTR sProfileNameOld,
  1008. __EXT_MFC_SAFE_LPCTSTR sProfileNameNew
  1009. );
  1010. // get profile name for window
  1011. __EXT_MFC_SAFE_LPCTSTR ProfileNameFromWnd(
  1012. HWND hWnd
  1013. );
  1014. // reset the toolbar/menu command statistics
  1015. bool ProfileResetUsageStatistics(
  1016. __EXT_MFC_SAFE_LPCTSTR sProfileName
  1017. );
  1018. // setup single command
  1019. bool CmdSetup(
  1020. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1021. const CExtCmdItem & _cmd,
  1022. bool bReplaceOld = false, // but force set images anywhere if was empty
  1023. bool * pbWasAddedNew = NULL
  1024. );
  1025. // remove single command
  1026. bool CmdRemove(
  1027. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1028. UINT nCmdID,
  1029. bool * pbWasRemoved = NULL
  1030. );
  1031. // remove all commands
  1032. virtual void CmdRemoveAll(
  1033. __EXT_MFC_SAFE_LPCTSTR sProfileName
  1034. );
  1035. // remove all commands by state mask
  1036. bool CmdRemoveByMask(
  1037. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1038. DWORD dwMask,
  1039. DWORD dwExMask = 0,
  1040. bool bAllBitsOnly = false,
  1041. bool bExAllBitsOnly = false
  1042. );
  1043. // get command
  1044. CExtCmdItem * CmdGetPtr(
  1045. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1046. UINT nCmdID
  1047. );
  1048. // alloc command
  1049. CExtCmdItem * CmdAllocPtr(
  1050. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1051. UINT nCmdID = 0 // 0 means any free in avail range
  1052. );
  1053. // is command registered
  1054. bool CmdIsRegistered(
  1055. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1056. UINT nCmdID
  1057. );
  1058. // assign icon to command
  1059. bool CmdSetIcon(
  1060. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1061. UINT nCmdID,
  1062. const CExtCmdIcon * pCmdIcon, // if NULL or empty - remove
  1063. bool bUseCmdIconObject
  1064. );
  1065. bool CmdSetIcon(
  1066. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1067. UINT nCmdID,
  1068. const CExtCmdIcon & cmdIcon // if empty - remove
  1069. );
  1070. bool CmdSetIcon(
  1071. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1072. UINT nCmdID,
  1073. const CExtBitmap & _bitmap, // if empty - remove
  1074. COLORREF clrTransparent = RGB(0,0,0),
  1075. LPCRECT pRectBitmapSrc = NULL
  1076. );
  1077. bool CmdSetIcon(
  1078. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1079. UINT nCmdID,
  1080. HICON hIcon, // if NULL - remove
  1081. bool bCopyIcon = true
  1082. );
  1083. // get command icon (if command and its icon exist)
  1084. CExtCmdIcon * CmdGetIconPtr(
  1085. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1086. UINT nCmdID
  1087. );
  1088. const CExtCmdIcon * CmdGetIconPtr(
  1089. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1090. UINT nCmdID
  1091. ) const;
  1092. CExtCmdIcon & CmdGetIcon(
  1093. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1094. UINT nCmdID
  1095. );
  1096. const CExtCmdIcon & CmdGetIcon(
  1097. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1098. UINT nCmdID
  1099. ) const;
  1100. // REMOVED 2.53
  1101. //  // get command hIcon
  1102. //  HICON CmdGetHICON(
  1103. //  __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1104. //  UINT nCmdID
  1105. //  )
  1106. //  {
  1107. //  CExtCmdIcon * pIcon =
  1108. //  CmdGetIconPtr(sProfileName,nCmdID);
  1109. //  if( pIcon == NULL )
  1110. //  return NULL;
  1111. //  ASSERT( !(pIcon->IsEmpty()) );
  1112. //  HICON hIcon = (*pIcon);
  1113. //  ASSERT( hIcon != NULL );
  1114. //  return hIcon;
  1115. //  }
  1116. // update commands collection from menu handle
  1117. bool UpdateFromMenu(
  1118. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1119. HMENU hMenu,
  1120. bool bReplaceOld = false,
  1121. bool bRecursive = true,
  1122. bool bLoadTips = true
  1123. );
  1124. // update commands collection from menu resurce
  1125. bool UpdateFromMenu(
  1126. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1127. UINT nResourceID,
  1128. bool bReplaceOld = false,
  1129. bool bLoadTips = true
  1130. );
  1131. // update commands collection from toolbar wnd
  1132. bool UpdateFromToolBar(
  1133. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1134. CToolBar & bar,
  1135. bool bReplaceOld = false, // but force set images anywhere if was empty
  1136. bool bLoadTips = true
  1137. );
  1138. // update commands collection from toolbar resource
  1139. bool UpdateFromToolBar(
  1140. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1141. UINT nResourceID,
  1142. LPUINT * ppCmdArray = NULL,
  1143. LPINT pCmdCount = NULL,
  1144. bool bReplaceOld = false, // but force set images anywhere if was empty
  1145. bool bLoadTips = true,
  1146. COLORREF clrBmpTransparent = RGB(192,192,192)
  1147. );
  1148. bool UpdateFromToolBar(
  1149. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1150. __EXT_MFC_SAFE_LPCTSTR strResourceID,
  1151. LPUINT * ppCmdArray = NULL,
  1152. LPINT pCmdCount = NULL,
  1153. bool bReplaceOld = false, // but force set images anywhere if was empty
  1154. bool bLoadTips = true,
  1155. COLORREF clrBmpTransparent = RGB(192,192,192)
  1156. );
  1157. // set list of commands (up to (UINT)0) as basic or non basic
  1158. bool SetBasicCommands(
  1159. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1160. UINT * pCommands,
  1161. bool bOn = true
  1162. );
  1163. // save/load command manager state
  1164. bool SerializeState(
  1165. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1166. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1167. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1168. bool bSave,
  1169. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1170. bool bEnableThrowExceptions = false
  1171. );
  1172. bool SerializeState(
  1173. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1174. CArchive & ar,
  1175. bool bEnableThrowExceptions = false
  1176. );
  1177. static bool FileObjToRegistry(
  1178. CFile & _file,
  1179. __EXT_MFC_SAFE_LPCTSTR sRegKeyPath,
  1180. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1181. bool bEnableThrowExceptions = false
  1182. );
  1183. static bool FileObjFromRegistry(
  1184. CFile & _file,
  1185. __EXT_MFC_SAFE_LPCTSTR sRegKeyPath,
  1186. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1187. bool bEnableThrowExceptions = false
  1188. );
  1189. static CExtSafeString GetSubSystemRegKeyPath(
  1190. __EXT_MFC_SAFE_LPCTSTR sSubSystemName,
  1191. __EXT_MFC_SAFE_LPCTSTR sProfileName,
  1192. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1193. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1194. );
  1195. virtual void OnGlobalPaintManagerChanged();
  1196. virtual void OnSysColorChange(
  1197. CExtPaintManager * pPM
  1198. );
  1199. virtual void OnSettingChange(
  1200. CExtPaintManager * pPM,
  1201. UINT uFlags,
  1202. __EXT_MFC_SAFE_LPCTSTR lpszSection
  1203. );
  1204. virtual void OnDisplayChange(
  1205. CExtPaintManager * pPM,
  1206. INT nDepthBPP,
  1207. CPoint ptSizes
  1208. );
  1209. virtual void OnThemeChanged(
  1210. CExtPaintManager * pPM,
  1211. WPARAM wParam,
  1212. LPARAM lParam
  1213. );
  1214. friend class CExtCmdItem;
  1215. friend class CExtCmdProfile;
  1216. }; // class CExtCmdManager
  1217. #define __EXT_MFC_LANG_ID_ARABIC_SAUDI_ARABIA ( MAKELANGID(LANG_ARABIC,SUBLANG_ARABIC_SAUDI_ARABIA) )
  1218. #define __EXT_MFC_LANG_ID_ARMENIAN_EASTERN ( MAKELANGID(LANG_ARMENIAN,SUBLANG_DEFAULT) )
  1219. #define __EXT_MFC_LANG_ID_BELARUSIAN ( MAKELANGID(LANG_BELARUSIAN,SUBLANG_DEFAULT) )
  1220. #define __EXT_MFC_LANG_ID_BOSNIAN ( MAKELANGID(LANG_CROATIAN,SUBLANG_DEFAULT) )
  1221. #define __EXT_MFC_LANG_ID_BULGARIAN_DEFAULT ( MAKELANGID(LANG_BULGARIAN,SUBLANG_DEFAULT) )
  1222. #define __EXT_MFC_LANG_ID_CHINESE_SIMPLIFIED ( MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) )
  1223. #define __EXT_MFC_LANG_ID_CHINESE_TRADITIONAL ( MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL) )
  1224. #define __EXT_MFC_LANG_ID_CROATIAN_DEFAULT ( MAKELANGID(LANG_CROATIAN,SUBLANG_DEFAULT) )
  1225. #define __EXT_MFC_LANG_ID_CZECH_DEFAULT ( MAKELANGID(LANG_CZECH,SUBLANG_DEFAULT) )
  1226. #define __EXT_MFC_LANG_ID_DANISH_DEFAULT ( MAKELANGID(LANG_DANISH,SUBLANG_DEFAULT) )
  1227. #define __EXT_MFC_LANG_ID_DUTCH_NETHERLANDS ( MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH) )
  1228. #define __EXT_MFC_LANG_ID_ENGLISH_US ( MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US) )
  1229. #define __EXT_MFC_LANG_ID_ESTONIAN ( MAKELANGID(LANG_ESTONIAN,SUBLANG_DEFAULT) )
  1230. #define __EXT_MFC_LANG_ID_GERMAN ( MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN) )
  1231. #define __EXT_MFC_LANG_ID_GREEK ( MAKELANGID(LANG_GREEK,SUBLANG_DEFAULT) )
  1232. #define __EXT_MFC_LANG_ID_HUNGARIAN_DEFAULT ( MAKELANGID(LANG_HUNGARIAN,SUBLANG_DEFAULT) )
  1233. #define __EXT_MFC_LANG_ID_FARSI ( MAKELANGID(LANG_FARSI,SUBLANG_DEFAULT) )
  1234. #define __EXT_MFC_LANG_ID_FRENCH ( MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH) )
  1235. #define __EXT_MFC_LANG_ID_FRENCH_CANADIAN ( MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_CANADIAN) )
  1236. #define __EXT_MFC_LANG_ID_INDONESIAN ( MAKELANGID(LANG_INDONESIAN,SUBLANG_DEFAULT) )
  1237. #define __EXT_MFC_LANG_ID_ITALIAN ( MAKELANGID(LANG_ITALIAN,SUBLANG_ITALIAN) )
  1238. #define __EXT_MFC_LANG_ID_JAPANESE_DEFAULT ( MAKELANGID(LANG_JAPANESE,SUBLANG_DEFAULT) )
  1239. #define __EXT_MFC_LANG_ID_KHMER ( MAKELANGID(LANG_CATALAN,SUBLANG_DEFAULT) )
  1240. #define __EXT_MFC_LANG_ID_KOREAN_DEFAULT ( MAKELANGID(LANG_KOREAN,SUBLANG_DEFAULT) )
  1241. #define __EXT_MFC_LANG_ID_LATVIAN_DEFAULT ( MAKELANGID(0x26,SUBLANG_DEFAULT) )
  1242. #define __EXT_MFC_LANG_ID_LITHUANIAN ( MAKELANGID(0x27,SUBLANG_LITHUANIAN) )
  1243. #define __EXT_MFC_LANG_ID_MACEDONIAN ( MAKELANGID(LANG_MACEDONIAN,SUBLANG_DEFAULT) )
  1244. #define __EXT_MFC_LANG_ID_NORWEGIAN_BOKMAL ( MAKELANGID(LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL) )
  1245. #define __EXT_MFC_LANG_ID_POLISH_DEFAULT ( MAKELANGID(LANG_POLISH,SUBLANG_DEFAULT) )
  1246. #define __EXT_MFC_LANG_ID_PORTUGUESE_BRAZILIAN ( MAKELANGID(LANG_PORTUGUESE,SUBLANG_PORTUGUESE_BRAZILIAN) )
  1247. #define __EXT_MFC_LANG_ID_ROMANIAN_DEFAULT ( MAKELANGID(LANG_ROMANIAN,SUBLANG_DEFAULT) )
  1248. #define __EXT_MFC_LANG_ID_RUSSIAN_DEFAULT ( MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT) )
  1249. #define __EXT_MFC_LANG_ID_SERBIAN_LATIN ( MAKELANGID(0x1A,SUBLANG_SERBIAN_LATIN) )
  1250. #define __EXT_MFC_LANG_ID_SLOVAK_DEFAULT ( MAKELANGID(LANG_SLOVAK,SUBLANG_DEFAULT) )
  1251. #define __EXT_MFC_LANG_ID_SLOVENIAN_DEFAULT ( MAKELANGID(LANG_SLOVENIAN,SUBLANG_DEFAULT) )
  1252. #define __EXT_MFC_LANG_ID_SPANISH_MODERN ( MAKELANGID(LANG_SPANISH,SUBLANG_SPANISH_MODERN) )
  1253. #define __EXT_MFC_LANG_ID_SWEDISH_DEFAULT ( MAKELANGID(LANG_SWEDISH,SUBLANG_DEFAULT) )
  1254. #define __EXT_MFC_LANG_ID_TURKISH_DEFAULT ( MAKELANGID(LANG_TURKISH,SUBLANG_DEFAULT) )
  1255. #define __EXT_MFC_LANG_ID_UKRAINIAN_DEFAULT ( MAKELANGID(0x22,SUBLANG_DEFAULT) )
  1256. #define __EXT_MFC_LANG_ID_VIETNAMESE ( MAKELANGID(LANG_VIETNAMESE,SUBLANG_DEFAULT) )
  1257. #define __EXT_MFC_LANG_ID_DEFAULT_NEUTRAL __EXT_MFC_LANG_ID_ENGLISH_US
  1258. class __PROF_UIS_API CExtResourceManager : public CObject
  1259. {
  1260. public:
  1261. DECLARE_SERIAL( CExtResourceManager );
  1262. // global auto-pointer class for CExtResourceManager
  1263. class __PROF_UIS_API CExtResourceManagerAutoPtr
  1264. : public CExtPmSynchronizeSink
  1265. {
  1266. CExtResourceManager * m_pResourceManager;
  1267. public:
  1268. CExtResourceManagerAutoPtr();
  1269. virtual ~CExtResourceManagerAutoPtr();
  1270. // resource manager instance access
  1271. CExtResourceManager * operator -> ();
  1272. CExtResourceManager * GetRM();
  1273. void InstallResourceManager(
  1274. CExtResourceManager * pNewResourceManager = NULL // NULL means install default resource manager
  1275. );
  1276. public:
  1277. // CExtPmSynchronizeSink methods
  1278. virtual bool PmSynchronizeSink_PerformSynchronizationWith(
  1279. CExtPmSynchronizeSink * pPmSynchronizeSink,
  1280. bool bRegister = true,
  1281. bool bSynchronizeItNow = true
  1282. );
  1283. virtual LPSTREAM PmSynchronizeSink_GetData(
  1284. HGLOBAL hGlobal = NULL
  1285. );
  1286. virtual void PmSynchronizeSink_SynchronizeFrom(
  1287. LPSTREAM pStream
  1288. );
  1289. }; // class CExtResourceManagerAutoPtr
  1290. // helper resource buffer class
  1291. class __PROF_UIS_API CExtResourceMemoryBuffer
  1292. {
  1293. void AssignFromOther(
  1294. const CExtResourceMemoryBuffer & other
  1295. );
  1296. int CompareWithOther(
  1297. const CExtResourceMemoryBuffer & other
  1298. ) const;
  1299. BYTE * m_pBuffer;
  1300. DWORD m_dwBufferSize;
  1301. public:
  1302. CExtResourceMemoryBuffer();
  1303. CExtResourceMemoryBuffer(
  1304. const CExtResourceMemoryBuffer & other
  1305. );
  1306. virtual ~CExtResourceMemoryBuffer();
  1307. #ifdef _DEBUG
  1308. void Dump();
  1309. #endif // _DEBUG
  1310. CExtResourceMemoryBuffer & operator = (
  1311. const CExtResourceMemoryBuffer & other
  1312. );
  1313. bool operator ! () const;
  1314. bool operator == (
  1315. const CExtResourceMemoryBuffer & other
  1316. ) const;
  1317. bool operator != (
  1318. const CExtResourceMemoryBuffer & other
  1319. ) const;
  1320. bool operator <  (
  1321. const CExtResourceMemoryBuffer & other
  1322. ) const;
  1323. bool operator <= (
  1324. const CExtResourceMemoryBuffer & other
  1325. ) const;
  1326. bool operator >  (
  1327. const CExtResourceMemoryBuffer & other
  1328. ) const;
  1329. bool operator >= (
  1330. const CExtResourceMemoryBuffer & other
  1331. ) const;
  1332. BYTE operator [] ( DWORD dwByteIndex ) const;
  1333. operator BYTE * ();
  1334. operator const BYTE * ();
  1335. DWORD GetSize() const;
  1336. BYTE * GetBuffer();
  1337. const BYTE * GetBuffer() const;
  1338. HGLOBAL AllocGlobalBufferBuffer(
  1339. UINT nFlags = GPTR
  1340. ) const;
  1341. bool IsEmpty() const;
  1342. void Empty();
  1343. bool Alloc(
  1344. DWORD dwBufferSize,
  1345. bool bZeroMemory = true
  1346. );
  1347. bool Load(
  1348. HINSTANCE hModule,
  1349. HRSRC hResource
  1350. );
  1351. bool FindAndLoad(
  1352. HINSTANCE hModule,
  1353. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1354. UINT nResourceName,
  1355. WORD nLangIdDesired
  1356. );
  1357. }; // class CExtResourceMemoryBuffer
  1358. protected:
  1359. bool m_bAllowCustomLang:1;
  1360. WORD m_nLangIdDesired;
  1361. DWORD m_nLangLayout;
  1362. public:
  1363. static WORD g_nLangIdNeutral;
  1364. CExtResourceManager(
  1365. bool bAllowCustomLang = false,
  1366. WORD nLangIdDesired = __EXT_MFC_LANG_ID_DEFAULT_NEUTRAL,
  1367. DWORD nLangLayout = DWORD(-1)  // if nLangLayout == DWORD(-1), get language layout from the locale information
  1368. );
  1369. virtual ~CExtResourceManager();
  1370. virtual void SerializeSynchronizationData( CArchive & ar );
  1371. virtual DLGTEMPLATE * OnAdjustDialogTemplate(
  1372. const DLGTEMPLATE * lpDialogTemplate,
  1373. CObject * pHelperSrc,
  1374. bool bWizard = false,
  1375. LPARAM lParam = 0L
  1376. );
  1377. virtual bool IsCustomLangAllowed() const;
  1378. virtual void AllowCustomLang(
  1379. bool bAllow = true
  1380. );
  1381. virtual DWORD OnQueryLangLayout() const;
  1382. virtual DWORD GetLangLayout() const;
  1383. virtual DWORD SetLangLayout(
  1384. DWORD nLangLayout = DWORD(-1) // if nLangLayout == DWORD(-1), get language layout from the locale information
  1385. );
  1386. virtual WORD GetLangIdDesired() const;
  1387. virtual void SetLangIdDesired(
  1388. WORD nLangIdDesired
  1389. );
  1390. virtual WORD GetLangIdNeutral() const;
  1391. virtual int GetLocaleInfo(
  1392. LCTYPE LCType,
  1393. __EXT_MFC_SAFE_LPTSTR lpLCData,
  1394. int cchData
  1395. );
  1396. virtual INT GetTimeFormat(
  1397. DWORD dwFlags, // options
  1398. const SYSTEMTIME * lpTime, // time
  1399. __EXT_MFC_SAFE_LPCTSTR lpFormat, // time format string
  1400. __EXT_MFC_SAFE_LPTSTR lpTimeStr, // formatted string buffer
  1401. INT cchTime // size of string buffer
  1402. );
  1403. virtual INT GetDateFormat(
  1404. DWORD dwFlags, // options
  1405. const SYSTEMTIME * lpDate, // date
  1406. __EXT_MFC_SAFE_LPCTSTR lpFormat, // date format
  1407. __EXT_MFC_SAFE_LPTSTR lpDateStr, // formatted string buffer
  1408. INT cchDate // size of buffer
  1409. );
  1410. virtual INT GetNumberFormat(
  1411. DWORD dwFlags, // options
  1412. __EXT_MFC_SAFE_LPCTSTR lpValue, // input number string
  1413. const NUMBERFMT * lpFormat, // formatting information
  1414. __EXT_MFC_SAFE_LPTSTR lpNumberStr, // output buffer
  1415. INT cchNumber // size of output buffer
  1416. );
  1417. virtual INT GetCurrencyFormat(
  1418. DWORD dwFlags, // operation option
  1419. __EXT_MFC_SAFE_LPCTSTR lpValue, // input number string
  1420. const CURRENCYFMT * lpFormat, // formatting information
  1421. __EXT_MFC_SAFE_LPTSTR lpCurrencyStr, // output buffer
  1422. INT cchCurrency // size of output buffer
  1423. );
  1424. // BEGIN: Experimental custom resource searching API
  1425. class __PROF_UIS_API RscInstEntry
  1426. {
  1427. mutable HINSTANCE m_hInstance;
  1428. bool m_bFreeInstance:1;
  1429. public:
  1430. RscInstEntry(
  1431. HINSTANCE hInstance,
  1432. bool bFreeInstance = true
  1433. );
  1434. RscInstEntry(
  1435. __EXT_MFC_SAFE_LPCTSTR strModulePathToLoad,
  1436. bool bFreeInstance = true
  1437. );
  1438. virtual ~RscInstEntry();
  1439. HINSTANCE GetInstance() const;
  1440. bool IsEmpty() const;
  1441. }; // class RscInstEntry
  1442. protected:
  1443. CTypedPtrArray < CPtrArray, RscInstEntry * > m_arrRscInst;
  1444. public:
  1445. INT RscInst_GetCount() const;
  1446. bool RscInst_Insert(
  1447. HINSTANCE hInstance,
  1448. bool bFreeInstance = true,
  1449. INT nInsertPos = -1 // -1 - Append
  1450. );
  1451. bool RscInst_Insert(
  1452. __EXT_MFC_SAFE_LPCTSTR strModulePathToLoad,
  1453. bool bFreeInstance = true,
  1454. INT nInsertPos = -1 // -1 - Append
  1455. );
  1456. bool RscInst_Insert(
  1457. RscInstEntry * pRscInstEntry,
  1458. INT nInsertPos = -1 // -1 - Append
  1459. );
  1460. bool RscInst_RemoveAt(
  1461. INT nRemovePos
  1462. );
  1463. void RscInst_RemoveAll();
  1464. const RscInstEntry * RscInst_GetAt(
  1465. INT nPos
  1466. ) const;
  1467. RscInstEntry * RscInst_GetAt(
  1468. INT nPos
  1469. );
  1470. virtual bool RscInst_LoadResourceBufferSingleLanguage(
  1471. CExtResourceMemoryBuffer & bufferOut,
  1472. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1473. UINT nResourceName,
  1474. WORD nLangIdDesired,
  1475. WORD * p_wLangIdOut = NULL,
  1476. HINSTANCE * p_hInstOut = NULL
  1477. );
  1478. virtual HINSTANCE RscInst_FindResourceHandleSingleLanguage(
  1479. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1480. UINT nResourceName,
  1481. WORD nLangIdDesired,
  1482. WORD * p_wLangIdOut = NULL,
  1483. HRSRC * p_hResourceOut = NULL
  1484. );
  1485. // END: Experimental custom resource searching API
  1486. // BEGIN: Experimental font substitution API (designed for Khmer language)
  1487. protected:
  1488. mutable CExtSafeString m_strHelperDesiredFontFaceName;
  1489. mutable CFont m_helperFontDesired;
  1490. public:
  1491. virtual __EXT_MFC_SAFE_LPCTSTR DesiredFont_GetFaceName() const;
  1492. virtual void DesiredFont_SetFaceName(
  1493. __EXT_MFC_SAFE_LPCTSTR strDesiredFontFaceName = NULL // NULL = no font replacement
  1494. );
  1495. virtual HFONT DesiredFont_GetHandle() const;
  1496. virtual void DesiredFont_ChangeWindow(
  1497. HWND hWnd,
  1498. INT nNestedDepth = 0, // 0 - only hWnd, 1 - +all its children, 2 - ...
  1499. bool bRedrawWindow = true
  1500. );
  1501. // END: Experimental font substitution API (designed for Khmer language)
  1502. virtual HINSTANCE FindResourceHandleSingleLanguage(
  1503. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1504. UINT nResourceName,
  1505. WORD nLangIdDesired,
  1506. WORD * p_wLangIdOut = NULL,
  1507. HRSRC * p_hResourceOut = NULL
  1508. );
  1509. virtual HINSTANCE FindResourceHandleEx(
  1510. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1511. UINT nResourceName,
  1512. WORD nLangIdDesired,
  1513. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1514. WORD * p_wLangIdOut = NULL,
  1515. HRSRC * p_hResourceOut = NULL
  1516. );
  1517. virtual HINSTANCE FindResourceHandle(
  1518. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1519. UINT nResourceName,
  1520. WORD * p_wLangIdOut = NULL,
  1521. HRSRC * p_hResourceOut = NULL
  1522. );
  1523. virtual bool LoadResourceBufferSingleLanguage(
  1524. CExtResourceMemoryBuffer & bufferOut,
  1525. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1526. UINT nResourceName,
  1527. WORD nLangIdDesired,
  1528. WORD * p_wLangIdOut = NULL,
  1529. HINSTANCE * p_hInstOut = NULL
  1530. );
  1531. virtual bool LoadResourceBufferEx(
  1532. CExtResourceMemoryBuffer & bufferOut,
  1533. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1534. UINT nResourceName,
  1535. WORD nLangIdDesired,
  1536. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1537. WORD * p_wLangIdOut = NULL,
  1538. HINSTANCE * p_hInstOut = NULL
  1539. );
  1540. virtual bool LoadResourceBuffer(
  1541. CExtResourceMemoryBuffer & bufferOut,
  1542. __EXT_MFC_SAFE_LPCTSTR strResourceType,
  1543. UINT nResourceName,
  1544. WORD * p_wLangIdOut = NULL,
  1545. HINSTANCE * p_hInstOut = NULL
  1546. );
  1547. virtual bool LoadStringEx(
  1548. CExtSafeString & strOut,
  1549. UINT nResourceName,
  1550. WORD nLangIdDesired,
  1551. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1552. WORD * p_wLangIdOut = NULL,
  1553. HINSTANCE * p_hInstOut = NULL
  1554. );
  1555. virtual bool LoadString(
  1556. CExtSafeString & strOut,
  1557. __EXT_MFC_SAFE_LPCTSTR strResourceName,
  1558. WORD * p_wLangIdOut = NULL,
  1559. HINSTANCE * p_hInstOut = NULL
  1560. );
  1561. virtual bool LoadString(
  1562. CExtSafeString & strOut,
  1563. UINT nResourceName,
  1564. WORD * p_wLangIdOut = NULL,
  1565. HINSTANCE * p_hInstOut = NULL
  1566. );
  1567. virtual bool LoadMenuEx(
  1568. CMenu & menuOut,
  1569. UINT nResourceName,
  1570. WORD nLangIdDesired,
  1571. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1572. WORD * p_wLangIdOut = NULL,
  1573. HINSTANCE * p_hInstOut = NULL
  1574. );
  1575. virtual bool LoadMenu(
  1576. CMenu & menuOut,
  1577. __EXT_MFC_SAFE_LPCTSTR strResourceName,
  1578. WORD * p_wLangIdOut = NULL,
  1579. HINSTANCE * p_hInstOut = NULL
  1580. );
  1581. virtual bool LoadMenu(
  1582. CMenu & menuOut,
  1583. UINT nResourceName,
  1584. WORD * p_wLangIdOut = NULL,
  1585. HINSTANCE * p_hInstOut = NULL
  1586. );
  1587. virtual HACCEL LoadAcceleratorsEx(
  1588. UINT nResourceName,
  1589. WORD nLangIdDesired,
  1590. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1591. WORD * p_wLangIdOut = NULL,
  1592. HINSTANCE * p_hInstOut = NULL
  1593. );
  1594. virtual HACCEL LoadAccelerators(
  1595. UINT nResourceName,
  1596. WORD * p_wLangIdOut = NULL,
  1597. HINSTANCE * p_hInstOut = NULL
  1598. );
  1599. virtual HACCEL LoadAccelerators(
  1600. __EXT_MFC_SAFE_LPCTSTR strResourceName,
  1601. WORD * p_wLangIdOut = NULL,
  1602. HINSTANCE * p_hInstOut = NULL
  1603. );
  1604. virtual bool LoadBitmapEx(
  1605. CExtBitmap & _bitmap,
  1606. UINT nResourceName,
  1607. WORD nLangIdDesired,
  1608. WORD nLangIdNeutral = CExtResourceManager::g_nLangIdNeutral,
  1609. WORD * p_wLangIdOut = NULL,
  1610. HINSTANCE * p_hInstOut = NULL
  1611. );
  1612. virtual bool LoadBitmap(
  1613. CExtBitmap & _bitmap,
  1614. UINT nResourceName,
  1615. WORD * p_wLangIdOut = NULL,
  1616. HINSTANCE * p_hInstOut = NULL
  1617. );
  1618. virtual bool LoadBitmap(
  1619. CExtBitmap & _bitmap,
  1620. __EXT_MFC_SAFE_LPCTSTR strResourceName,
  1621. WORD * p_wLangIdOut = NULL,
  1622. HINSTANCE * p_hInstOut = NULL
  1623. );
  1624. }; // class CExtResourceManager
  1625. extern __PROF_UIS_API CExtCmdManager::CExtCmdManagerAutoPtr g_CmdManager;
  1626. extern __PROF_UIS_API CExtResourceManager::CExtResourceManagerAutoPtr g_ResourceManager;
  1627. /////////////////////////////////////////////////////////////////////////////
  1628. // CExtResDlg window
  1629. #define __EXT_MFC_DLU_BASE_CVT_CX 1000
  1630. #define __EXT_MFC_DLU_BASE_CVT_CY 1000
  1631. class __PROF_UIS_API CExtResDlg
  1632. : public CDialog
  1633. , public CExtPmBridge
  1634. {
  1635. CSize m_sizeDLUCVT;
  1636. public:
  1637. DECLARE_DYNCREATE( CExtResDlg );
  1638. DECLARE_CExtPmBridge_MEMBERS( CExtResDlg );
  1639. CExtResDlg();
  1640. CExtResDlg(
  1641. UINT nIDTemplate,
  1642. CWnd * pParentWnd = NULL
  1643. );
  1644. CExtResDlg(
  1645. __EXT_MFC_SAFE_LPCTSTR lpszTemplateName,
  1646. CWnd * pParentWnd = NULL
  1647. );
  1648. virtual ~CExtResDlg();
  1649. int _DLU2PxHorz( int nX );
  1650. int _DLU2PxVert( int nY );
  1651. void _DLU2Px( POINT & _pt );
  1652. void _DLU2Px( SIZE & _size );
  1653. void _DLU2Px( RECT & _rc );
  1654. virtual __EXT_MFC_SAFE_LPCTSTR OnQuerySkinnedFontParmName() const;
  1655. virtual void PmBridge_OnPaintManagerChanged(
  1656. CExtPaintManager * pGlobalPM
  1657. );
  1658. // Operations
  1659. public:
  1660. // Overrides
  1661. // ClassWizard generated virtual function overrides
  1662. //{{AFX_VIRTUAL(CExtResDlg)
  1663. //}}AFX_VIRTUAL
  1664. // Implementation
  1665. public:
  1666. BOOL Create(
  1667. __EXT_MFC_SAFE_LPCTSTR lpszTemplateName,
  1668. CWnd * pParentWnd = NULL
  1669. );
  1670. BOOL Create(
  1671. UINT nIDTemplate,
  1672. CWnd * pParentWnd = NULL
  1673. );
  1674. virtual __EXT_MFC_INT_PTR DoModal();
  1675. virtual BOOL OnInitDialog();
  1676. virtual DLGTEMPLATE * OnAdjustDialogTemplate(
  1677. const DLGTEMPLATE * lpDialogTemplate
  1678. );
  1679. static DLGTEMPLATE * stat_ChangeDlgFont(
  1680. const DLGTEMPLATE * pTemplate
  1681. );
  1682. BOOL ExecuteDlgInit( __EXT_MFC_SAFE_LPCTSTR lpszResourceName );
  1683. BOOL ExecuteDlgInit( LPVOID pResource );
  1684. static BOOL stat_ExecuteDlgInit(
  1685. CWnd * pWnd,
  1686. LPVOID pResource
  1687. );
  1688. protected:
  1689. virtual __EXT_MFC_INT_PTR _DoModalImpl();
  1690. virtual bool OnQueryAutomaticRTLTransform() const
  1691. {
  1692. return false;
  1693. }
  1694. public:
  1695. BOOL CreateDlgIndirect(
  1696. LPCDLGTEMPLATE lpDialogTemplate,
  1697. CWnd * pParentWnd
  1698. );
  1699. BOOL CreateDlgIndirect(
  1700. LPCDLGTEMPLATE lpDialogTemplate,
  1701. CWnd * pParentWnd,
  1702. HINSTANCE hInst
  1703. );
  1704. BOOL CreateIndirect(
  1705. LPCDLGTEMPLATE lpDialogTemplate,
  1706. CWnd * pParentWnd = NULL,
  1707. void * lpDialogInit = NULL
  1708. );
  1709. BOOL CreateIndirect(
  1710. HGLOBAL hDialogTemplate,
  1711. CWnd * pParentWnd = NULL
  1712. );
  1713. BOOL CreateIndirect(
  1714. LPCDLGTEMPLATE lpDialogTemplate,
  1715. CWnd * pParentWnd,
  1716. void * lpDialogInit,
  1717. HINSTANCE hInst
  1718. );
  1719. BOOL CreateIndirect(
  1720. HGLOBAL hDialogTemplate,
  1721. CWnd * pParentWnd,
  1722. HINSTANCE hInst
  1723. );
  1724. private:
  1725. __EXT_MFC_SAFE_LPCTSTR m_lpszTemplateName_SAVED;
  1726. // Generated message map functions
  1727. protected:
  1728. //{{AFX_MSG(CExtResDlg)
  1729. afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
  1730. //}}AFX_MSG
  1731. DECLARE_MESSAGE_MAP()
  1732. }; // class CExtResDlg
  1733. /////////////////////////////////////////////////////////////////////////////
  1734. // CExtResPP window
  1735. class __PROF_UIS_API CExtResPP
  1736. : public CPropertyPage
  1737. , public CExtPmBridge
  1738. {
  1739. public:
  1740. DECLARE_DYNCREATE( CExtResPP );
  1741. DECLARE_CExtPmBridge_MEMBERS( CExtResPP );
  1742. CExtResPP();
  1743. CExtResPP(
  1744. UINT nIDTemplate,
  1745. UINT nIDCaption = 0
  1746. );
  1747. CExtResPP(
  1748. __EXT_MFC_SAFE_LPCTSTR lpszTemplateName,
  1749. UINT nIDCaption = 0
  1750. );
  1751. virtual ~CExtResPP();
  1752. virtual __EXT_MFC_SAFE_LPCTSTR OnQuerySkinnedFontParmName() const;
  1753. // Operations
  1754. public:
  1755. // Overrides
  1756. // ClassWizard generated virtual function overrides
  1757. //{{AFX_VIRTUAL(CExtResPP)
  1758. //}}AFX_VIRTUAL
  1759. // Implementation
  1760. public:
  1761. virtual BOOL OnInitDialog();
  1762. BOOL ExecuteDlgInit( __EXT_MFC_SAFE_LPCTSTR lpszResourceName );
  1763. BOOL ExecuteDlgInit( LPVOID pResource );
  1764. static BOOL CExtResPP::stat_GetPropSheetFont(
  1765. CExtSafeString & strFace,
  1766. WORD & wSize,
  1767. BOOL bWizard
  1768. );
  1769. virtual DLGTEMPLATE * OnAdjustDialogTemplate(
  1770. const DLGTEMPLATE * pTemplate,
  1771. BOOL bWizard
  1772. );
  1773. static DLGTEMPLATE * stat_ChangePropPageFont(
  1774. const DLGTEMPLATE * pTemplate,
  1775. BOOL bWizard
  1776. );
  1777. void PreProcessPageTemplate(
  1778. PROPSHEETPAGE & psp,
  1779. BOOL bWizard
  1780. );
  1781. private:
  1782. __EXT_MFC_SAFE_LPCTSTR m_lpszTemplateName_SAVED;
  1783. static UINT CALLBACK stat_PropPageCallback( HWND, UINT message, LPPROPSHEETPAGE pPropPage );
  1784. protected:
  1785. void CommonConstruct(
  1786. __EXT_MFC_SAFE_LPCTSTR lpszTemplateName,
  1787. UINT nIDCaption
  1788. );
  1789. public:
  1790. void Construct(
  1791. UINT nIDTemplate,
  1792. UINT nIDCaption = 0
  1793. );
  1794. void Construct(
  1795. __EXT_MFC_SAFE_LPCTSTR lpszTemplateName,
  1796. UINT nIDCaption = 0
  1797. );
  1798. #ifdef _DEBUG
  1799. virtual void AssertValid() const;
  1800. #endif
  1801. // Generated message map functions
  1802. protected:
  1803. //{{AFX_MSG(CExtResPP)
  1804. //}}AFX_MSG
  1805. DECLARE_MESSAGE_MAP()
  1806. }; // class CExtResPP
  1807. /////////////////////////////////////////////////////////////////////////////
  1808. // CExtResPS window
  1809. class __PROF_UIS_API CExtResPS
  1810. : public CPropertySheet
  1811. , public CExtPmBridge
  1812. {
  1813. public:
  1814. DECLARE_DYNCREATE( CExtResPS );
  1815. DECLARE_CExtPmBridge_MEMBERS( CExtResPS );
  1816. CExtResPS();
  1817. CExtResPS(
  1818. UINT nIDCaption,
  1819. CWnd * pParentWnd = NULL,
  1820. UINT iSelectPage = 0
  1821. );
  1822. CExtResPS(
  1823. __EXT_MFC_SAFE_LPCTSTR pszCaption,
  1824. CWnd * pParentWnd = NULL,
  1825. UINT iSelectPage = 0
  1826. );
  1827. virtual ~CExtResPS();
  1828. virtual __EXT_MFC_SAFE_LPCTSTR OnQuerySkinnedFontParmName() const;
  1829. // Operations
  1830. public:
  1831. // Overrides
  1832. // ClassWizard generated virtual function overrides
  1833. //{{AFX_VIRTUAL(CExtResPS)
  1834. protected:
  1835. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  1836. //}}AFX_VIRTUAL
  1837. // Implementation
  1838. public:
  1839. virtual BOOL OnInitDialog();
  1840. virtual void BuildPropPageArray();
  1841. virtual void InitLocalizedChildren();
  1842. // Generated message map functions
  1843. protected:
  1844. //{{AFX_MSG(CExtResPS)
  1845. //}}AFX_MSG
  1846. DECLARE_MESSAGE_MAP()
  1847. }; // class CExtResPS
  1848. #endif // __ExtCmdManager_H