ExtControlsCommon.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 __EXT_CONTROLS_COMMON_H)
  22. #define __EXT_CONTROLS_COMMON_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #if (!defined __EXT_EXTCONTENTEXPANDWND_H)
  27. #include <ExtContentExpandWnd.h>
  28. #endif
  29. #if (!defined __EXT_SCROLLWND_H)
  30. #include <ExtScrollWnd.h>
  31. #endif 
  32. #if (!defined __EXT_EDIT_H)
  33. #include <ExtEdit.h>
  34. #endif
  35. #if (!defined __EXT_COMBO_BOX_H)
  36. #include <ExtComboBox.h>
  37. #endif
  38. #if (!defined __EXT_PAINT_MANAGER_H)
  39. #include <ExtPaintManager.h>
  40. #endif
  41. #if (!defined __EXT_POPUP_MENU_WND_H)
  42. #include <ExtPopupMenuWnd.h>
  43. #endif
  44. #if (!defined __EXT_HOOK_H)
  45. #include "../Src/ExtHook.h"
  46. #endif
  47. #if (!defined __EXT_RESIZABLE_DIALOG_H)
  48. #include <ExtResizableDialog.h>
  49. #endif
  50. #if (!defined __EXT_NC_FRAME_H)
  51. #include <ExtNcFrame.h>
  52. #endif
  53. #if _MSC_VER > 1000
  54. #pragma once
  55. #endif // _MSC_VER > 1000
  56. #if ( ! defined __EXT_MFC_NO_LIST_VIEW_CTRL )
  57. /////////////////////////////////////////////////////////////////////////////
  58. // CExtListCtrlDataSortOrder
  59. class __PROF_UIS_API CExtListCtrlDataSortOrder : public CObject
  60. {
  61. void _AssignFromOther(
  62. const CExtListCtrlDataSortOrder & other
  63. );
  64. public:
  65. DECLARE_SERIAL( CExtListCtrlDataSortOrder );
  66. struct __PROF_UIS_API COLUMN_INFO
  67. {
  68. LONG m_nColNo;
  69. bool m_bAscending:1;
  70. COLUMN_INFO(
  71. LONG nColNo = -1L,
  72. bool bAscending = true
  73. );
  74. COLUMN_INFO( const COLUMN_INFO & other );
  75. COLUMN_INFO & operator = ( const COLUMN_INFO & other );
  76. void Serialize( CArchive & ar );
  77. int Cmp( const COLUMN_INFO & other ) const;
  78. bool operator == ( const COLUMN_INFO & other ) const;
  79. bool operator != ( const COLUMN_INFO & other ) const;
  80. bool operator <= ( const COLUMN_INFO & other ) const;
  81. bool operator >= ( const COLUMN_INFO & other ) const;
  82. bool operator < ( const COLUMN_INFO & other ) const;
  83. bool operator > ( const COLUMN_INFO & other ) const;
  84. }; // struct COLUMN_INFO
  85. CArray < COLUMN_INFO, COLUMN_INFO & > m_arrItems;
  86. CExtListCtrlDataSortOrder();
  87. CExtListCtrlDataSortOrder(
  88. const CExtListCtrlDataSortOrder & other
  89. );
  90. virtual ~CExtListCtrlDataSortOrder();
  91. CExtListCtrlDataSortOrder & operator =(
  92. const CExtListCtrlDataSortOrder & other
  93. );
  94. bool operator == (
  95. const CExtListCtrlDataSortOrder & other
  96. ) const;
  97. bool operator != (
  98. const CExtListCtrlDataSortOrder & other
  99. ) const;
  100. #ifdef _DEBUG
  101. virtual void AssertValid() const;
  102. virtual void Dump( CDumpContext & dc ) const;
  103. #endif // _DEBUG
  104. virtual void Serialize( CArchive & ar );
  105. bool ItemsUnique() const;
  106. void MakeItemsUnique();
  107. bool IsEmpty() const;
  108. void Empty();
  109. LONG GetColPos( LONG nColNo ) const;
  110. void SetupOrder(
  111. const CExtListCtrlDataSortOrder & _gdsoUpdate,
  112. bool bInvertIntersectionSortOrder
  113. );
  114. void UpdateIndices(
  115. LONG nColNo,
  116. LONG nInsertRemoveCount,
  117. bool bInsert
  118. );
  119. void SwapDroppedSeries(
  120. LONG nColNoSrc,
  121. LONG nColNoDropBefore
  122. );
  123. }; // class CExtListCtrlDataSortOrder
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CExtHeaderCtrl
  126. class __PROF_UIS_API CExtHeaderCtrl
  127. : public CHeaderCtrl
  128. , public CExtPmBridge
  129. {
  130. public:
  131.     DECLARE_DYNCREATE( CExtHeaderCtrl );
  132. IMPLEMENT_CExtPmBridge_MEMBERS( CExtHeaderCtrl );
  133. CExtHeaderCtrl();
  134. virtual ~CExtHeaderCtrl();
  135. virtual void PmBridge_OnPaintManagerChanged(
  136. CExtPaintManager * pGlobalPM
  137. );
  138. struct __PROF_UIS_API EXTENDED_ITEM_DATA
  139. {
  140. CExtCmdIcon m_iconItem, m_iconButton;
  141. CExtSafeString m_strTipTextItem, m_strTipTextButton;
  142. INT m_nExtentMin, m_nExtentMax;
  143. bool m_bDisableDnd:1;
  144. EXTENDED_ITEM_DATA();
  145. EXTENDED_ITEM_DATA( const EXTENDED_ITEM_DATA & other );
  146. virtual ~EXTENDED_ITEM_DATA();
  147. void AssignFromOther( const EXTENDED_ITEM_DATA & other );
  148. EXTENDED_ITEM_DATA & operator = ( const EXTENDED_ITEM_DATA & other );
  149. bool CanBeResized() const;
  150. }; /// struct EXTENDED_ITEM_DATA
  151. public:
  152. static const UINT g_nMsgHeaderButtonClick;
  153. bool m_bShowTipsOverHeader:1;
  154. CExtListCtrlDataSortOrder m_sortOrder;
  155. INT m_nDividerHalfExtent;
  156. static bool g_bEnableOnIdleCalls;
  157. protected:
  158. mutable CArray < EXTENDED_ITEM_DATA, EXTENDED_ITEM_DATA & > m_arrExtendedData;
  159. public:
  160. INT m_nAdvancedTipStyle; // CExtPopupMenuTipWnd::__ETS_RECTANGLE_NO_ICON
  161. virtual CExtPopupMenuTipWnd * OnAdvancedPopupMenuTipWndGet() const;
  162. virtual void OnAdvancedPopupMenuTipWndDisplay(
  163. CExtPopupMenuTipWnd & _ATTW,
  164. const RECT & rcExcludeArea,
  165. __EXT_MFC_SAFE_LPCTSTR strToolTipText
  166. ) const;
  167. INT ColNo2VisualIndex( INT nColNo ) const; // convert column number to visual index
  168. INT VisualIndex2ColNo( INT nIndex ) const; // convert visual index to column number
  169. virtual INT HitTestHeaderItem(
  170. const POINT & ptClient,
  171. bool * p_bOnButton = NULL,
  172. bool * p_bOnDividerAtRight = NULL,
  173. bool bComputeZeroWidthItem = true
  174. ) const;
  175. virtual void OnEraseHeaderBackground(
  176. CDC & dc,
  177. const CRect & rcClient
  178. ) const;
  179. virtual CSize OnCalcHeaderItemSize(
  180. INT nColNo
  181. ) const;
  182. virtual void OnCalcHeaderItemLayout(
  183. INT nColNo,
  184. const CRect & _rcItemEntire,
  185. CRect & _rcItem,
  186. CRect & _rcIcon,
  187. CRect & _rcText,
  188. CRect & _rcSortArrow,
  189. CRect & _rcButton,
  190. CRect & _rcButtonIcon,
  191. bool * p_bSorted = NULL,
  192. bool * p_bSortedAscending = NULL
  193. ) const;
  194. virtual void OnPaintHeaderItem(
  195. CDC & dc,
  196. const HD_ITEM & _item,
  197. INT nColNo,
  198. const CRect & _rcItemEntire,
  199. bool bDND = false
  200. ) const;
  201. virtual void OnHeaderItemClick(
  202. INT nColNo,
  203. INT nMouseButton // 0 - left button, 1 - right button, 2 - middle button
  204. );
  205. virtual void OnHeaderItemButtonClick( INT nColNo );
  206. virtual void OnHeaderItemDividerAtRightDoubleClick( INT nColNo );
  207. //{{AFX_VIRTUAL(CExtHeaderCtrl)
  208. protected:
  209. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  210. virtual void PreSubclassWindow();
  211. virtual void PostNcDestroy();
  212. //}}AFX_VIRTUAL
  213. protected:
  214. CPoint m_ptScreenPressing;
  215. INT m_nHoverColNo, m_nHoverIndex, m_nPressingColNo, m_nPressingIndex, m_nHelperInitialResizingExtent;
  216. bool m_bOnButton:1, m_bOnDividerAtRight:1, m_bCancelingActions:1;
  217. virtual void _CancelActions();
  218. bool _DoSetCursor();
  219. virtual bool _DoSetCursor( const POINT ptScreen ); // CPoint(-32767,-32767) means invoke ::GetCursorPos()
  220. virtual bool _DndIsAllowed(
  221. INT nColNo = -1
  222. ) const;
  223. virtual CPoint _DndGetStartOffset() const;
  224. virtual INT _DndCalcOuterDropTarget( CPoint point ) const;
  225. virtual void _DndDo(
  226. INT nColNo,
  227. CPoint ptStartDrag,
  228. bool bNotify = true // send HDN_BEGINDRAG and HDN_ENDDRAG messages
  229. );
  230. virtual void _DndSwap( INT nColNo, INT nColNoToDropBefore );
  231. virtual bool _PaintExpandedItemContent(
  232. CExtContentExpandWnd::PAINT_ITEM_CONTENT_DATA & picd
  233. ) const;
  234. public:
  235. HCURSOR m_hCursorDefault, m_hCursorResizingH1, m_hCursorResizingH2, m_hCursorOuterDragOK, m_hCursorOuterDragCancel;
  236. virtual void SortRulesGet(
  237. CExtListCtrlDataSortOrder & _sortOrder
  238. ) const;
  239. virtual void SortRulesSet(
  240. const CExtListCtrlDataSortOrder & _sortOrder
  241. );
  242. const EXTENDED_ITEM_DATA & ExtendedItemDataGet( INT nColNo ) const;
  243. virtual EXTENDED_ITEM_DATA & ExtendedItemDataGet( INT nColNo );
  244. virtual INT HeaderItemExtentGet( INT nColNo ) const;
  245. virtual void HeaderItemExtentSet(
  246. INT nColNo,
  247. INT nExtent,
  248. bool bRedraw = true
  249. );
  250. protected:
  251. //{{AFX_MSG(CExtHeaderCtrl)
  252. afx_msg void OnPaint();
  253. afx_msg void OnWindowPosChanging( WINDOWPOS FAR * lpwndpos );
  254. afx_msg BOOL OnEraseBkgnd( CDC * pDC );
  255. afx_msg BOOL OnSetCursor( CWnd * pWnd, UINT nHitTest, UINT message );
  256. afx_msg void OnMouseMove( UINT nFlags, CPoint point );
  257. afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
  258. afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
  259. afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point );
  260. afx_msg void OnRButtonDown( UINT nFlags, CPoint point );
  261. afx_msg void OnRButtonUp( UINT nFlags, CPoint point );
  262. afx_msg void OnRButtonDblClk( UINT nFlags, CPoint point );
  263. afx_msg void OnMButtonDown( UINT nFlags, CPoint point );
  264. afx_msg void OnMButtonUp( UINT nFlags, CPoint point );
  265. afx_msg void OnMButtonDblClk( UINT nFlags, CPoint point );
  266. afx_msg void OnCancelMode();
  267. afx_msg void OnCaptureChanged( CWnd * pWnd );
  268. //}}AFX_MSG
  269. afx_msg LRESULT _OnPaintExpandedItemContent( WPARAM wParam, LPARAM lParam );
  270. DECLARE_MESSAGE_MAP()
  271. }; /// class CExtHeaderCtrl
  272. /////////////////////////////////////////////////////////////////////////////
  273. // CExtListCtrl
  274. class __PROF_UIS_API CExtListCtrl
  275. : public CListCtrl
  276. , public CExtPmBridge
  277. , public CExtHookSpy
  278. {
  279. public:
  280. DECLARE_DYNCREATE( CExtListCtrl );
  281. IMPLEMENT_CExtPmBridge_MEMBERS( CExtListCtrl );
  282. CExtListCtrl();
  283. virtual ~CExtListCtrl();
  284. protected:
  285. CExtListCtrl( UINT, CWnd * ) { } // for CExtNCSB template class compilation only
  286. CExtListCtrl( __EXT_MFC_SAFE_LPCTSTR, CWnd * ) { } // for CExtNCSB template class compilation only
  287. public:
  288. virtual void PmBridge_OnPaintManagerChanged(
  289. CExtPaintManager * pGlobalPM
  290. );
  291. bool m_bSortEnabled:1, m_bSortEnabledMultiple:1,
  292. m_bColumnAutoSizingByData:1, m_bColumnAutoSizingByHeader:1;
  293. protected:
  294. CExtHeaderCtrl m_wndHeaderCtrl;
  295. virtual bool _Init();
  296. virtual CExtHeaderCtrl & _OnQueryHeaderCtrl();
  297. public:
  298. CExtHeaderCtrl & GetHeaderCtrl();
  299. const CExtHeaderCtrl & GetHeaderCtrl() const;
  300. void GetSelectedItemsList(
  301. CList < INT, INT > & _listSelectedItems, 
  302. bool bAddToTail = true
  303. );
  304. virtual bool VerifySortOrder(
  305. const CExtListCtrlDataSortOrder & _sortOrder
  306. ) const;
  307. virtual INT CompareItems(
  308. const CExtListCtrlDataSortOrder & _sortOrder,
  309. INT nItemIndex1,
  310. INT nItemIndex2
  311. ) const;
  312. virtual void SwapItems(
  313. INT nItemIndex1,
  314. INT nItemIndex2
  315. );
  316. bool SortItems(
  317. INT nItemIndexLow = 0,
  318. INT nItemIndexHigh = -1
  319. );
  320. virtual bool SortItems(
  321. const CExtListCtrlDataSortOrder & _sortOrder,
  322. INT nItemIndexLow = 0,
  323. INT nItemIndexHigh = -1
  324. );
  325. void ModifyExtendedStyle( DWORD dwRemove, DWORD dwAdd );
  326. void ColumnStateSave( CExtSafeString strSection, CExtSafeString strControl );
  327. virtual void ColumnAutoSize(
  328. INT nColNo,
  329. bool bAutoSizeByData = true,
  330. bool bAutoSizeByHeader = true
  331. );
  332. INT ColumnExtentGet( INT nColNo ) const;
  333. void ColumnExtentSet( INT nColNo, INT nExtent );
  334. virtual void StateSerialize(
  335. CArchive & ar,
  336. bool bExtents = true,
  337. bool bColumnOrder = true,
  338. bool bSortOrder = true,
  339. bool bListViewMode = true
  340. );
  341. virtual bool StateLoad(
  342. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  343. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  344. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  345. HKEY hKeyRoot = HKEY_CURRENT_USER,
  346. bool bExtents = true,
  347. bool bColumnOrder = true,
  348. bool bSortOrder = true,
  349. bool bListViewMode = true
  350. );
  351. virtual bool StateSave(
  352. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  353. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  354. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  355. HKEY hKeyRoot = HKEY_CURRENT_USER,
  356. bool bExtents = true,
  357. bool bColumnOrder = true,
  358. bool bSortOrder = true,
  359. bool bListViewMode = true
  360. );
  361. protected:
  362. bool m_bReadOnlyLabels:1;
  363. public:
  364. bool ReadOnlyLabelsGet() const;
  365. void ReadOnlyLabelsSet( bool bReadOnlyLabels );
  366. void SelectedItemsListGet(
  367. CList < INT, INT > & _listSelectedItems,
  368. bool bAddToTail = true
  369. ) const;
  370. void SelectedItemsListSet(
  371. const CList < INT, INT > & _listSelectedItems
  372. );
  373. bool IsItemSelected(
  374. INT nItemIndex
  375. ) const;
  376. void SelectItem(
  377. INT nItemIndex,
  378. bool bSelect = true
  379. );
  380. INT FocusedItemGet() const;
  381. INT FocusedItemSet( // returns previous focused item index
  382. INT nItemIndex,
  383. bool bSelectFocusedItem = true,
  384. bool bUnselectOtherItems = true
  385. );
  386. //{{AFX_VIRTUAL(CExtListCtrl)
  387. protected:
  388. virtual void PreSubclassWindow();
  389. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  390. //}}AFX_VIRTUAL
  391. protected:
  392. //{{AFX_MSG(CExtListCtrl)
  393. afx_msg void OnHeaderItemClick(NMHDR* pNMHDR, LRESULT* pResult);
  394. afx_msg void OnHeaderItemDoubleClick(NMHDR* pNMHDR, LRESULT* pResult);
  395. afx_msg void OnDestroy();
  396. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  397. afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  398. afx_msg void OnDeleteItem( NMHDR * pNMHDR, LRESULT * pResult );
  399. afx_msg void OnDeleteAllItems( NMHDR * pNMHDR, LRESULT * pResult );
  400. afx_msg void OnBeginLabelEdit( NMHDR * pNMHDR, LRESULT * pResult );
  401. afx_msg void OnBeginDrag( NMHDR * pNMHDR, LRESULT * pResult );
  402. afx_msg void OnEndDrag( NMHDR * pNMHDR, LRESULT * pResult );
  403. //}}AFX_MSG
  404. DECLARE_MESSAGE_MAP()
  405. }; /// class CExtListCtrl
  406. #if ( _MFC_VER == 0x700 ) && (! defined __EXT_PROFUIS_STATIC_LINK)
  407. template class __PROF_UIS_API CExtNCSB_Impl < CExtListCtrl >;
  408. #endif
  409. template < > class
  410. //#if ( _MFC_VER != 0x700 )
  411. __PROF_UIS_API
  412. //#endif
  413. CExtNCSB < CExtListCtrl > : public CExtNCSB_Impl < CExtListCtrl >
  414. {
  415. public:
  416. CExtNCSB(
  417. bool bNcsbDelayedInitialization = false,
  418. bool bNcsbForceMiddleContainerMode = false
  419. );
  420. virtual ~CExtNCSB();
  421. virtual void AdjustScrollMetrics();
  422. protected:
  423. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  424. }; // template < > class CExtNCSB < CExtListCtrl >
  425. //#if ( _MFC_VER == 0x700 ) && (! defined __EXT_PROFUIS_STATIC_LINK)
  426. // template class __PROF_UIS_API CExtNCSB < CExtListCtrl >;
  427. //#endif
  428. #endif //  ( ! defined __EXT_MFC_NO_LIST_VIEW_CTRL )
  429. #if ( ! defined __EXT_MFC_NO_TREE_VIEW_CTRL )
  430. /////////////////////////////////////////////////////////////////////////////
  431. // CExtTreeCtrl
  432. #define __EXT_TREE_CTRL_BORDER_GAP 1
  433. // hit test flags
  434. #define __EXT_TVHT_NOWHERE            0x0001 // nowhere and not on any item
  435. #define __EXT_TVHT_ONITEMICON         0x0002 // icon
  436. #define __EXT_TVHT_ONITEMLABEL        0x0004 // item label
  437. #define __EXT_TVHT_ONITEM             ( __EXT_TVHT_ONITEMICON | __EXT_TVHT_ONITEMLABEL | __EXT_TVHT_ONITEMSTATEICON )
  438. #define __EXT_TVHT_ONITEMINDENT       0x0008 // tree lines area
  439. #define __EXT_TVHT_ONITEMBUTTON       0x0010 // box
  440. #define __EXT_TVHT_ONITEMRIGHT        0x0020 // at right
  441. #define __EXT_TVHT_ONITEMSTATEICON    0x0040
  442. #define __EXT_TVHT_ONCHECKBOX         0x0080 // check box
  443. #define __EXT_TVHT_ONCONTROL          0x0100 // in-place control area
  444. // styles
  445. #define __EXT_TREE_MULTIPLE_SELECTION 0x80000000
  446. #define __EXT_TREE_SELECT_DISABLE_ITEMS 0x40000000
  447. #define __EXT_TREE_FOCUS_DISABLE_ITEMS 0x20000000
  448. #define __EXT_TREE_SELECT_COLLAPSED_ITEMS 0x10000000
  449. #define __EXT_TREE_SUBTRACT_SELECTION 0x08000000
  450. #define __EXT_TREE_HOVER_DISABLE_ITEMS 0x04000000
  451. #define __EXT_TREE_AUTO_DISABLE_ITEMS_BY_PARENT 0x02000000
  452. #define __EXT_TREE_USER_DEFINED_24 0x01000000
  453. #define __EXT_TREE_USER_DEFINED_23 0x00800000
  454. #define __EXT_TREE_USER_DEFINED_22 0x00400000
  455. #define __EXT_TREE_USER_DEFINED_21 0x00200000
  456. #define __EXT_TREE_USER_DEFINED_20 0x00100000
  457. #define __EXT_TREE_USER_DEFINED_19 0x00080000
  458. #define __EXT_TREE_USER_DEFINED_18 0x00040000
  459. #define __EXT_TREE_USER_DEFINED_17 0x00020000
  460. #define __EXT_TREE_USER_DEFINED_16 0x00010000
  461. #define __EXT_TREE_USER_DEFINED_15 0x00008000
  462. #define __EXT_TREE_USER_DEFINED_14 0x00004000
  463. #define __EXT_TREE_USER_DEFINED_13 0x00002000
  464. #define __EXT_TREE_USER_DEFINED_12 0x00001000
  465. #define __EXT_TREE_USER_DEFINED_11 0x00000800
  466. #define __EXT_TREE_USER_DEFINED_10 0x00000400
  467. #define __EXT_TREE_USER_DEFINED_09 0x00000200
  468. #define __EXT_TREE_USER_DEFINED_08 0x00000100
  469. #define __EXT_TREE_USER_DEFINED_07 0x00000080
  470. #define __EXT_TREE_USER_DEFINED_06 0x00000040
  471. #define __EXT_TREE_USER_DEFINED_05 0x00000020
  472. #define __EXT_TREE_USER_DEFINED_04 0x00000010
  473. #define __EXT_TREE_USER_DEFINED_03 0x00000008
  474. #define __EXT_TREE_USER_DEFINED_02 0x00000004
  475. #define __EXT_TREE_USER_DEFINED_01 0x00000002
  476. #define __EXT_TREE_USER_DEFINED_00 0x00000001
  477. #define __EXT_TREE_DEFAULT_STYLES 0
  478. // extended styles
  479. #define __EXT_TREE_EX_HOVER_TREE_BOXES 0x80000000
  480. #define __EXT_TREE_EX_HOVER_CHECK_BOXES 0x40000000
  481. #define __EXT_TREE_EX_HOVER_RADIO_BUTTONS 0x20000000
  482. #define __EXT_TREE_EX_USER_DEFINED_28 0x10000000
  483. #define __EXT_TREE_EX_USER_DEFINED_27 0x08000000
  484. #define __EXT_TREE_EX_USER_DEFINED_26 0x04000000
  485. #define __EXT_TREE_EX_USER_DEFINED_25 0x02000000
  486. #define __EXT_TREE_EX_USER_DEFINED_24 0x01000000
  487. #define __EXT_TREE_EX_USER_DEFINED_23 0x00800000
  488. #define __EXT_TREE_EX_USER_DEFINED_22 0x00400000
  489. #define __EXT_TREE_EX_USER_DEFINED_21 0x00200000
  490. #define __EXT_TREE_EX_USER_DEFINED_20 0x00100000
  491. #define __EXT_TREE_EX_USER_DEFINED_19 0x00080000
  492. #define __EXT_TREE_EX_USER_DEFINED_18 0x00040000
  493. #define __EXT_TREE_EX_USER_DEFINED_17 0x00020000
  494. #define __EXT_TREE_EX_USER_DEFINED_16 0x00010000
  495. #define __EXT_TREE_EX_USER_DEFINED_15 0x00008000
  496. #define __EXT_TREE_EX_USER_DEFINED_14 0x00004000
  497. #define __EXT_TREE_EX_USER_DEFINED_13 0x00002000
  498. #define __EXT_TREE_EX_USER_DEFINED_12 0x00001000
  499. #define __EXT_TREE_EX_USER_DEFINED_11 0x00000800
  500. #define __EXT_TREE_EX_USER_DEFINED_10 0x00000400
  501. #define __EXT_TREE_EX_USER_DEFINED_09 0x00000200
  502. #define __EXT_TREE_EX_USER_DEFINED_08 0x00000100
  503. #define __EXT_TREE_EX_USER_DEFINED_07 0x00000080
  504. #define __EXT_TREE_EX_USER_DEFINED_06 0x00000040
  505. #define __EXT_TREE_EX_USER_DEFINED_05 0x00000020
  506. #define __EXT_TREE_EX_USER_DEFINED_04 0x00000010
  507. #define __EXT_TREE_EX_USER_DEFINED_03 0x00000008
  508. #define __EXT_TREE_EX_USER_DEFINED_02 0x00000004
  509. #define __EXT_TREE_EX_USER_DEFINED_01 0x00000002
  510. #define __EXT_TREE_EX_USER_DEFINED_00 0x00000001
  511. #define __EXT_TREE_EX_DEFAULT_STYLES 0
  512. #define __EXT_TREE_CONTROL_TIMER_ID_TRACKHOVER 13
  513. class __PROF_UIS_API CExtTreeCtrl
  514. : public CTreeCtrl
  515. , public CExtHookSpy
  516. {
  517. public:
  518. DECLARE_DYNCREATE( CExtTreeCtrl )
  519. CExtTreeCtrl();
  520. virtual ~CExtTreeCtrl();
  521. enum e_line_type_t
  522. {
  523. line_empty,
  524. line_corner,
  525. line_beam,
  526. line_branch
  527. };
  528. enum e_check_box_type_t
  529. {
  530. e_cbt_none,
  531. e_cbt_radio,
  532. e_cbt_check_box,
  533. e_cbt_tri_state_check_box,
  534. };
  535. enum e_item_control_type_t
  536. {
  537. __EICT_NONE,
  538. __EICT_EDIT,
  539. __EICT_DROPDOWN_COMBOBOX,
  540. __EICT_DROPLIST_COMBOBOX,
  541. __EICT_PROGRESS_BAR_THEMED,
  542. __EICT_PROGRESS_BAR_WITH_BOXES,
  543. __EICT_PROGRESS_BAR_SMOOTH,
  544. __EICT_PROGRESS_BAR_ENDLESS,
  545. };
  546. struct __PROF_UIS_API COMBOBOXITEMDATA_t
  547. {
  548. CExtSafeString m_strLabel;
  549. LPARAM m_lParam;
  550. COMBOBOXITEMDATA_t(
  551. __EXT_MFC_SAFE_LPCTSTR strLabel = NULL,
  552. LPARAM lParam = 0L
  553. );
  554. COMBOBOXITEMDATA_t( const COMBOBOXITEMDATA_t & other );
  555. virtual ~COMBOBOXITEMDATA_t();
  556. COMBOBOXITEMDATA_t & operator = ( const COMBOBOXITEMDATA_t & other );
  557. }; // struct COMBOBOXITEMDATA_t
  558. struct __PROF_UIS_API TREEITEMINFO_t
  559. {
  560. COLORREF
  561. m_clrTextNormal, m_clrBackgroundNormal,
  562. m_clrTextSelected, m_clrBackgroundSelected,
  563. m_clrTextDisabled, m_clrBackgroundDisabled,
  564. m_clrTextHover;
  565. bool m_bSelected:1, m_bDisabled:1, m_bBold:1, m_bItalic:1, m_bUnderline:1;
  566. e_check_box_type_t m_eCheckBoxType;
  567. e_item_control_type_t m_eICT;
  568. INT m_nCheckBoxState; // 0-unchecked, 1-checked, 2-indeterminate
  569. CExtSafeString m_strRadioGroupName;
  570. INT m_nIconIndexCollapsed, m_nIconIndexExpanded;
  571. INT m_nProgressMin, m_nProgressMax, m_nProgressPos;
  572. LPARAM m_lParam;
  573. INT m_nControlWidth, m_nDropDownHeight;
  574. CExtSafeString m_strEditText;
  575. DWORD m_dwAdditionalControlStyles, m_dwAdditionalLabelEditorStyles;
  576. protected:
  577. CTypedPtrArray < CPtrArray, COMBOBOXITEMDATA_t * > m_arrComboBoxItems;
  578. public:
  579. TREEITEMINFO_t();
  580. TREEITEMINFO_t( const TREEITEMINFO_t & other );
  581. virtual ~TREEITEMINFO_t();
  582. protected:
  583. void Init();
  584. void AssignFromOther( const TREEITEMINFO_t & other );
  585. public:
  586. TREEITEMINFO_t & operator = ( const TREEITEMINFO_t & other );
  587. INT ComboBoxItem_GetCount() const;
  588. COMBOBOXITEMDATA_t * ComboBoxItem_GetAt( INT nIndex );
  589. const COMBOBOXITEMDATA_t * ComboBoxItem_GetAt( INT nIndex ) const;
  590. COMBOBOXITEMDATA_t & ComboBoxItem_GetRefAt( INT nIndex );
  591. const COMBOBOXITEMDATA_t & ComboBoxItem_GetRefAt( INT nIndex ) const;
  592. void ComboBoxItem_InsertAt(
  593. INT nIndex,
  594. COMBOBOXITEMDATA_t * pCID,
  595. bool bInsertClonedCopy // = true
  596. );
  597. void ComboBoxItem_InsertAt(
  598. INT nIndex,
  599. const COMBOBOXITEMDATA_t & _CID
  600. );
  601. void ComboBoxItem_Add(
  602. COMBOBOXITEMDATA_t * pCID,
  603. bool bInsertClonedCopy // = true
  604. );
  605. void ComboBoxItem_Add( const COMBOBOXITEMDATA_t & _CID );
  606. INT ComboBoxItem_RemoveAt(
  607. INT nIndex = 0,
  608. INT nCountToRemove = -1
  609. ); // default parameters - remove all, returns removed count
  610. }; // struct TREEITEMINFO_t
  611. public:
  612. DWORD m_dwCheckBoxAreaFlags;
  613. protected:
  614. mutable CFont m_fontNormal, m_fontBold, m_fontItalic, m_fontBoldItalic,
  615.   m_fontNormalUnderline, m_fontBoldUnderline, 
  616.   m_fontItalicUnderline, m_fontBoldItalicUnderline;
  617. void _FontsSync();
  618. void _FontsDestroy();
  619. mutable CMap < HTREEITEM, HTREEITEM, TREEITEMINFO_t *, TREEITEMINFO_t * > m_mapItemInfo;
  620. virtual void _UnregisterItemsFromMap(
  621. HTREEITEM hti = NULL
  622. );
  623. virtual void _UnregisterItemsFromMapLinear();
  624. virtual void _UnregisterOneItemFromMap(
  625. HTREEITEM hti
  626. );
  627. virtual void PostNcDestroy();
  628. //{{AFX_VIRTUAL(CExtTreeCtrl)
  629. protected:
  630. virtual void PreSubclassWindow();
  631. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  632. //}}AFX_VIRTUAL
  633. protected:
  634. //{{AFX_MSG(CExtTreeCtrl)
  635. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  636. afx_msg void OnPaint();
  637. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  638. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  639. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  640. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  641. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  642. afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
  643. afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
  644. afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
  645. afx_msg void OnMButtonDblClk(UINT nFlags, CPoint point);
  646. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  647. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  648. //afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  649. afx_msg void OnSetFocus(CWnd* pOldWnd);
  650. afx_msg void OnKillFocus(CWnd* pNewWnd);
  651. afx_msg LRESULT OnSetFont( WPARAM wParam, LPARAM lParam );
  652. afx_msg LRESULT OnSettingChange( WPARAM wParam, LPARAM lParam );
  653. afx_msg LRESULT OnStyleChanging( WPARAM wParam, LPARAM lParam );
  654. afx_msg LRESULT OnStyleChanged( WPARAM wParam, LPARAM lParam );
  655. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  656. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  657. afx_msg void OnSize(UINT nType, int cx, int cy);
  658. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  659. afx_msg void OnCancelMode();
  660. afx_msg LRESULT _OnPaintExpanedItemContent(WPARAM wParam, LPARAM lParam);
  661. afx_msg BOOL OnMouseWheel( UINT nFlags, short zDelta, CPoint pt );
  662. afx_msg UINT OnGetDlgCode();
  663. afx_msg void OnContextMenu( CWnd* pWnd, CPoint point );
  664. //}}AFX_MSG
  665. afx_msg void OnTimer( __EXT_MFC_UINT_PTR nIDEvent );
  666. DECLARE_MESSAGE_MAP()
  667. #if _MFC_VER < 0x700
  668. afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
  669. #else
  670. afx_msg void OnActivateApp(BOOL bActive, DWORD hTask);
  671. #endif
  672. public:
  673. // overrides
  674. virtual void OnTreeItemUnRegisterData(
  675. TREEITEMINFO_t & _TII
  676. );
  677. virtual void OnTreeItemContextMenu(
  678. HTREEITEM hti,
  679. CPoint point, // client coordinates
  680. DWORD dwHitTestFlags
  681. );
  682. virtual void OnPaintEntireTree( CDC & dc );
  683. virtual void OnPaintTreeItem(
  684. HTREEITEM hti,
  685. CDC & dc,
  686. CRect rcItemEntire,
  687. bool bFocusedWindow,
  688. bool bDisabledItem,
  689. bool bSelectedItem,
  690. bool bFocusedItem,
  691. bool bDH
  692. );
  693. virtual void OnPaintTreeItemLines(
  694. HTREEITEM hti,
  695. CDC & dc,
  696. INT nLevelIndent,
  697. CRect rcLinesArea,
  698. COLORREF clrForceLines
  699. );
  700. virtual void OnPaintTreeItemExpandCollapseButton(
  701. HTREEITEM hti,
  702. CDC & dc,
  703. CRect rcTreeBoxArea,
  704. COLORREF clrForceBoxLines,
  705. COLORREF clrForceBoxBackground,
  706. COLORREF clrForceBoxBk
  707. );
  708. virtual void OnPaintTreeItemBackground(
  709. HTREEITEM hti,
  710. CDC & dc,
  711. CRect rcItemLabel,
  712. bool bFocusedWindow,
  713. bool bDisabledItem,
  714. bool bSelectedItem,
  715. bool bFocusedItem,
  716. bool bDH,
  717. COLORREF clrItemBk
  718. );
  719. virtual void OnPaintTreeItemText(
  720. HTREEITEM hti,
  721. CDC & dc,
  722. CRect rcItemLabel,
  723. COLORREF clrItemText
  724. );
  725. virtual void OnPaintTreeItemInsertMark(
  726. HTREEITEM hti,
  727. CDC & dc,
  728. bool bInsertMarkAfter,
  729. COLORREF clrInsertMark,
  730. CRect rcItemEntire,
  731. CRect rcItemLabel
  732. );
  733. virtual CFont * OnQueryItemFont( HTREEITEM hti );
  734. virtual void OnPaintTreeItemCheckBox(
  735. HTREEITEM hti,
  736. CDC & dc,
  737. CRect rcTreeCheckBoxArea
  738. );
  739. virtual void OnPaintTreeItemRadioBox(
  740. HTREEITEM hti,
  741. CDC & dc,
  742. CRect rcTreeRadioBoxArea
  743. );
  744. virtual void OnPaintTreeItemIcon(
  745. HTREEITEM hti,
  746. CDC & dc,
  747. const CExtCmdIcon & _icon,
  748. CRect rcTreeIconArea,
  749. BYTE nSCA = BYTE(255)
  750. );
  751. virtual void OnPaintTreeItemControl(
  752. HTREEITEM hti,
  753. CDC & dc,
  754. CRect rcTreeControlArea,
  755. COLORREF clrControlText
  756. );
  757. protected:
  758. INT m_nLastMouseButtonEventType[3]; // last events for VK_LBUTTON[0], VK_MBUTTON[0] and VK_RBUTTON[0], values is 0-down, 1-up, 2-double click
  759. bool _OnTreeMouseClickImpl(
  760. int nMouseButton,
  761. int nClick,
  762. UINT nMouseEventFlags,
  763. CPoint point
  764. );
  765. public:
  766. virtual bool OnTreeMouseClick(
  767. HTREEITEM hti,
  768. DWORD dwHitTestFlags,
  769. int nMouseButton,
  770. int nClick,
  771. UINT nMouseEventFlags,
  772. CPoint point
  773. );
  774. virtual bool OnTreeItemDoDragDetect(
  775. HTREEITEM hti,
  776. DWORD dwHitTestFlags,
  777. int nMouseButton,
  778. int nClick,
  779. UINT nMouseEventFlags,
  780. CPoint point
  781. );
  782. virtual void OnTreeMouseMove(UINT nFlags, CPoint point);
  783. // APIs
  784. public:
  785. virtual BOOL Expand( HTREEITEM hti, UINT nCode );
  786. bool TreeItemIsExpanded( HTREEITEM hti ) const;
  787. bool HasItem( HTREEITEM hti ) const;
  788. bool HasAncestor(
  789. HTREEITEM htiParent,
  790. HTREEITEM htiChild,
  791. INT nMaxStepCount = -1
  792. ) const;
  793. TREEITEMINFO_t * TreeItemInfoGetPtr( HTREEITEM hti );
  794. const TREEITEMINFO_t * TreeItemInfoGetPtr( HTREEITEM hti ) const;
  795. TREEITEMINFO_t & TreeItemInfoGet( HTREEITEM hti );
  796. const TREEITEMINFO_t & TreeItemInfoGet( HTREEITEM hti ) const;
  797. enum e_line_style_t
  798. {
  799. line_style_solid,
  800. line_style_dots
  801. };
  802. enum e_tree_box_style_t
  803. {
  804. tree_box_style_square,
  805. tree_box_style_round,
  806. tree_box_style_bitmap
  807. };
  808. protected:
  809. e_line_style_t m_eOS;
  810. e_tree_box_style_t m_eTBS;
  811. COLORREF m_clrExpandCollapseButtonSign, m_clrExpandCollapseButtonFill;
  812. COLORREF m_clrLines;
  813. COLORREF m_clrTreeBkColor;
  814. COLORREF m_clrProgressBorder;
  815. COLORREF m_clrProgressBackgroundColor;
  816. COLORREF m_clrProgressBoxColor;
  817. public:
  818. e_line_style_t LineStyleGet() const;
  819. void LineStyleSet( e_line_style_t eOS );
  820. e_tree_box_style_t TreeBoxStyleGet() const;
  821. void TreeBoxStyleSet( e_tree_box_style_t eTBS );
  822. COLORREF ExpandCollapseButtonSignColorGet() const;
  823. void ExpandCollapseButtonSignColorSet( COLORREF clr );
  824. COLORREF ExpandCollapseButtonFillColorGet() const;
  825. void ExpandCollapseButtonFillColorSet( COLORREF clr );
  826. COLORREF LineColorGet() const;
  827. void LineColorSet( COLORREF clr );
  828. COLORREF TreeBkColorGet() const;
  829. void TreeBkColorSet( COLORREF clr );
  830. COLORREF ProgressBorderColorGet() const;
  831. void ProgressBorderColorSet( COLORREF clr );
  832. COLORREF ProgressBackgroundColorGet() const;
  833. void ProgressBackgroundColorSet( COLORREF clr );
  834. COLORREF ProgressBoxColorGet() const;
  835. void ProgressBoxColorSet( COLORREF clr );
  836. virtual bool OnQueryItemEnabledState( HTREEITEM hti ) const;
  837. bool IsItemEnabled( HTREEITEM hti ) const;
  838. void EnableItem(
  839. HTREEITEM hti,
  840. bool bEnable = true
  841. );
  842. bool IsItemSelected( HTREEITEM hti ) const;
  843. void SelectItem(
  844. HTREEITEM hti,
  845. bool bSelect = true,
  846. bool bSubtract = false
  847. );
  848. void GetSelectedItemsList(
  849. CList < HTREEITEM, HTREEITEM > & _listSelectedItems,
  850. HTREEITEM htiStart = NULL, // NULL - root
  851. bool bDeep = true,
  852. bool bAnalyseSelectedChildren = false,
  853. bool bAddToTail = true
  854. ) const;
  855. protected:
  856. void _GetSelectedItemsList_Impl(
  857. CList < HTREEITEM, HTREEITEM > & _listSelectedItems,
  858. HTREEITEM htiStart = NULL, // NULL - root
  859. bool bDeep = true,
  860. bool bAnalyseSelectedChildren = false,
  861. bool bAddToTail = true
  862. ) const;
  863. public:
  864. void SelectItemRange(
  865. HTREEITEM htiFrom,
  866. HTREEITEM htiTo,
  867. bool bSelect,
  868. bool bExpandedOnly = true,
  869. bool bIncludeDisabled = true,
  870. bool bSubtract = false
  871. );
  872. HTREEITEM GetInPlaceEditedItem() const;
  873. HTREEITEM GetFocusedItem() const;
  874. void FocusItem(
  875. HTREEITEM hti,
  876. bool bSelect = false,
  877. bool bUnselectOtherItems = false,
  878. bool bMouseClickEvent = false
  879. );
  880. static const UINT g_nMsgTreeItemDelayedFocus;
  881. virtual void OnTreeItemDelayedFocus(
  882. HTREEITEM hti,
  883. bool bStartWaiting,
  884. bool bMouseClickEvent = false
  885. );
  886. CExtContentExpandWnd  m_wndContentExpand;
  887. HTREEITEM _GetNextParent( HTREEITEM hti ) const;
  888. HTREEITEM _GetPreviousItem( HTREEITEM hti, bool bExpandedOnly ) const;
  889. HTREEITEM _GetLastChildItem( HTREEITEM hti ) const;
  890. HTREEITEM _LinearItemGetNext(
  891. HTREEITEM htiFrom,
  892. bool bExpandedOnly = true
  893. ) const;
  894. HTREEITEM _LinearItemGetPrev(
  895. HTREEITEM htiFrom,
  896. bool bExpandedOnly = true
  897. ) const;
  898. HTREEITEM LinearItemGetNext(
  899. HTREEITEM htiFrom,
  900. bool bExpandedOnly = true,
  901. bool bIncludeDisabled = true
  902. ) const;
  903. HTREEITEM LinearItemGetPrev(
  904. HTREEITEM htiFrom,
  905. bool bExpandedOnly = true,
  906. bool bIncludeDisabled = true
  907. ) const;
  908. bool LinearItemIsBefore(
  909. HTREEITEM htiFrom,
  910. HTREEITEM htiBefore,
  911. bool bExpandedOnly = true
  912. ) const;
  913. bool LinearItemIsAfter(
  914. HTREEITEM htiFrom,
  915. HTREEITEM htiAfter,
  916. bool bExpandedOnly = true
  917. ) const;
  918. HTREEITEM LinearItemFromItem(
  919. HTREEITEM htiFrom,
  920. INT nOffset,
  921. INT * p_nResultShift = NULL,
  922. bool bExpandedOnly = true,
  923. bool bIncludeDisabled = true
  924. );
  925. protected:
  926. DWORD m_dwTreeStyle, m_dwTreeStyleEx;
  927. public:
  928. DWORD TreeGetStyle() const;
  929. void TreeModifyStyle(
  930. DWORD dwStyleAdd,
  931. DWORD dwStyleRemove = 0
  932. );
  933. DWORD TreeGetStyleEx() const;
  934. void TreeModifyStyleEx(
  935. DWORD dwStyleExAdd,
  936. DWORD dwStyleExRemove = 0
  937. );
  938. INT TreeGetDisplayedItemCount(
  939. bool * p_bLastIsPartiallyVisible = NULL
  940. ) const;
  941. protected:
  942. HTREEITEM m_htiAnchorItem, m_htiInsertMark;
  943. bool m_bInsertMarkAfter:1;
  944. public:
  945. HTREEITEM AnchorItemGet() const;
  946. void AnchorItemSet( HTREEITEM hti );
  947. protected:
  948. void _SingleExpand( HTREEITEM hti, bool bSingleExpand );
  949. public:
  950. bool MultipleSelectionGet() const;
  951. void MultipleSelectionSet( bool bSet = true );
  952. bool SelectDisabledItemsGet() const;
  953. void SelectDisabledItemsSet( bool bSet = true );
  954. bool FocusDisabledItemsGet() const;
  955. void FocusDisabledItemsSet( bool bSet = true );
  956. bool SelectCollapsedItemsGet() const;
  957. void SelectCollapsedItemsSet( bool bSet = true );
  958. bool SubtractSelectionGet() const;
  959. void SubtractSelectionSet( bool bSet = true );
  960. bool FullRowSelectionGet() const;
  961. void FullRowSelectionSet( bool bSet = true );
  962. bool HasButtonsGet() const;
  963. void HasButtonsSet( bool bSet = true );
  964. bool HasLinesGet() const;
  965. void HasLinesSet( bool bSet = true );
  966. bool LinesAtRootGet() const;
  967. void LinesAtRootSet( bool bSet = true );
  968. bool ShowSelectionAlwaysGet() const;
  969. void ShowSelectionAlwaysSet( bool bSet = true );
  970. bool SingleExpandGet() const;
  971. void SingleExpandSet( bool bSet = true );
  972. bool TrackSelectionGet() const;
  973. void TrackSelectionSet( bool bSet = true );
  974. // bool CheckBoxesGet() const;
  975. // void CheckBoxesSet( bool bSet = true );
  976. bool HoverDisabledItemsGet() const;
  977. void HoverDisabledItemsSet( bool bSet = true );
  978. bool AutoDisableChildrenItemsGet() const;
  979. void AutoDisableChildrenItemsSet( bool bSet = true );
  980. bool HoverTreeBoxesGet() const;
  981. void HoverTreeBoxesSet( bool bSet = true );
  982. bool HoverCheckBoxesGet() const;
  983. void HoverCheckBoxesSet( bool bSet = true );
  984. bool HoverRadioBoxesGet() const;
  985. void HoverRadioBoxesSet( bool bSet = true );
  986. virtual INT OnTreeItemCalcCheckBoxAreaWidth() const;
  987. virtual bool TreeItemRectsGet(
  988. HTREEITEM hti,
  989. CRect * pRectEntire,
  990. CRect * pRectLineArea = NULL,
  991. CRect * pRectExpandCollapseButton = NULL,
  992. CRect * pRectCheckBox = NULL,
  993. CRect * pRectIcon = NULL,
  994. CRect * pRectLabel = NULL,
  995. CRect * pRectControl = NULL,
  996. CRect * pRectRightPart = NULL
  997. ) const;
  998. enum e_tree_item_rect_type_t
  999. {
  1000. e_tirt_entire, // all item (entire client area width)
  1001. e_tirt_line_area,
  1002. e_tirt_tree_box,
  1003. e_tirt_check_box,
  1004. e_tirt_icon,
  1005. e_tirt_label,
  1006. e_tirt_control,
  1007. e_tirt_right_part,
  1008. };
  1009. bool TreeItemRectGet(
  1010. HTREEITEM hti,
  1011. CRect & rcRetVal,
  1012. e_tree_item_rect_type_t eTIRT
  1013. ) const;
  1014. virtual INT TreeItemCalcLabelWidth(
  1015. HTREEITEM hti
  1016. ) const;
  1017. virtual HTREEITEM TreeItemHitTest(
  1018. CPoint ptClient,
  1019. DWORD & dwHitTestFlags
  1020. ) const;
  1021. virtual void _DeselectRadioBoxesNextPrev(
  1022. HTREEITEM hti,
  1023. CExtSafeString m_strRadioGroupName
  1024. );
  1025. void _CheckRadioBox( HTREEITEM hti );
  1026. protected:
  1027. bool m_bCanceling:1;
  1028. CArray < CExtCmdIcon *, CExtCmdIcon * > m_arrIcons;
  1029. virtual void _DoDelayedTreeIconInit();
  1030. public:
  1031. virtual INT TreeIconGetCount() const;
  1032. virtual void TreeIconInsert(
  1033. const CExtCmdIcon & _icon,
  1034. INT nPos
  1035. );
  1036. void TreeIconAdd(
  1037. const CExtCmdIcon & _icon
  1038. );
  1039. virtual void TreeIconRemove(
  1040. INT nPos,
  1041. INT nCount = 1
  1042. );
  1043. void TreeIconRemoveAll();
  1044. virtual CExtCmdIcon & TreeIconGetAt( INT nPos );
  1045. const CExtCmdIcon & TreeIconGetAt( INT nPos ) const;
  1046. protected:
  1047. HTREEITEM m_htiInplaceEdited;
  1048. HWND m_hWndChildControl;
  1049. bool m_bReadOnlyLabels:1;
  1050. public:
  1051. bool ReadOnlyLabelsGet() const;
  1052. void ReadOnlyLabelsSet( bool bReadOnlyLabels );
  1053. const CExtCmdIcon * OnTreeItemQueryIcon(
  1054. HTREEITEM hti
  1055. ) const;
  1056. virtual HWND OnInplaceControlCreate(
  1057. HTREEITEM hti,
  1058. CRect rcControl
  1059. );
  1060. virtual void OnInplaceControlCancel();
  1061. virtual void OnInplaceControlComplete(
  1062. __EXT_MFC_SAFE_LPCTSTR strEditedText,
  1063. bool bEditingLabel
  1064. );
  1065. class __PROF_UIS_API CInplaceEdit
  1066. : public CExtEdit
  1067. , public CExtHookSpy
  1068. {
  1069. public:
  1070. bool m_bEditingLabel:1, m_bResultSaved:1;
  1071. CInplaceEdit( bool bEditingLabel );
  1072. protected:
  1073. virtual void PreSubclassWindow();
  1074. virtual void PostNcDestroy();
  1075. virtual bool OnHookSpyKeyMsg(
  1076. MSG * pMSG
  1077. );
  1078. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  1079. }; // class CInplaceEdit
  1080. class __PROF_UIS_API CInplaceComboBox : public CExtComboBox
  1081. {
  1082. bool m_bResultSaved:1;
  1083. public:
  1084. CInplaceComboBox();
  1085. protected:
  1086. virtual void PreSubclassWindow();
  1087. virtual void PostNcDestroy();
  1088. virtual bool OnHookSpyKeyMsg(
  1089. MSG * pMSG
  1090. );
  1091. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  1092. }; // class CInplaceComboBox
  1093. virtual bool OnQueryWindowFocusedState() const;
  1094. protected:
  1095. INT m_nMarginCheckBoxLeft, m_nMarginCheckBoxRight,
  1096. m_nMarginIconLeft, m_nMarginIconRight,
  1097. m_nMarginLabelLeft, m_nMarginLabelRight,
  1098. m_nMarginControlLabelLeft, m_nMarginControlLabelRight,
  1099. m_nPaddingLabelLeft, m_nPaddingLabelRight;
  1100. public:
  1101. INT MarginCheckBoxLeftGet() const;
  1102. void MarginCheckBoxLeftSet( INT nMargin );
  1103. INT MarginCheckBoxRightGet() const;
  1104. void MarginCheckBoxRightSet( INT nMargin );
  1105. INT MarginIconLeftGet() const;
  1106. void MarginIconLeftSet( INT nMargin );
  1107. INT MarginIconRightGet() const;
  1108. void MarginIconRightSet( INT nMargin );
  1109. INT MarginLabelLeftGet() const;
  1110. void MarginLabelLeftSet( INT nMargin );
  1111. INT MarginLabelRightGet() const;
  1112. void MarginLabelRightSet( INT nMargin );
  1113. INT MarginControlLabelLeftGet() const;
  1114. void MarginControlLabelLeftSet( INT nMargin );
  1115. INT MarginControlLabelRightGet() const;
  1116. void MarginControlLabelRightSet( INT nMargin );
  1117. INT PaddingLabelLeftGet() const;
  1118. void PaddingLabelLeftSet( INT nPadding );
  1119. INT PaddingLabelRightGet() const;
  1120. void PaddingLabelRightSet( INT nPadding );
  1121. CExtBitmap m_bmpTreeBoxExpanded, m_bmpTreeBoxCollapsed,
  1122. m_bmpTreeBoxExpandedHover, m_bmpTreeBoxCollapsedHover;
  1123. virtual bool _NeedsChildren( HTREEITEM hti ) const;
  1124. virtual void _DeleteChildren( HTREEITEM hti );
  1125. protected:
  1126. HCURSOR m_hCursorHand;
  1127. HTREEITEM m_htiHover;
  1128. DWORD m_dwLastHoverHitTestFlags;
  1129. public:
  1130. // flags for LPARAM of g_nMsgTreeItemDelayedFocus
  1131. enum delayed_focus_event_type_t
  1132. {
  1133. __PARM_DELAYED_FOCUS_BEGIN_WAITING = 1,
  1134. __PARM_DELAYED_FOCUS_MOUSE_CLICK = 2,
  1135. };
  1136. protected:
  1137. UINT m_nDelayedFocusTimerID, m_nDelayedFocusTime;
  1138. UINT m_nDelayedEditingTimerID;
  1139. HTREEITEM m_htiDelayedFocus;
  1140. public:
  1141. virtual void OnTreeItemHoverChanged(
  1142. HTREEITEM htiHoverNew,
  1143. DWORD dwHitTestFlagsNew,
  1144. HTREEITEM htiHoverOld,
  1145. DWORD dwHitTestFlagsOld
  1146. );
  1147. virtual void OnTreeItemSetCursor(
  1148. HTREEITEM htiHover,
  1149. DWORD dwHitTestFlags
  1150. );
  1151. void LoadWinXPTreeBox();
  1152. void LoadWinVistaTreeBox();
  1153. void _CheckDeepFocusBegin(
  1154. CList < HTREEITEM, HTREEITEM > & _listFocusPath
  1155. );
  1156. HTREEITEM _CheckDeepFocusEnd(
  1157. CList < HTREEITEM, HTREEITEM > & _listFocusPath
  1158. );
  1159. HTREEITEM FindItemByText(
  1160. HTREEITEM htiStartWalk,
  1161. __EXT_MFC_SAFE_LPCTSTR strText,
  1162. UINT nStartWalkCode = TVGN_CHILD,
  1163. UINT nContinueWalkCode = TVGN_NEXT
  1164. );
  1165. }; // class CExtTreeCtrl
  1166. /////////////////////////////////////////////////////////////////////////////
  1167. // CExtWTC
  1168. template < class _BT > class CExtWTC : public _BT
  1169. {
  1170. public:
  1171. CExtWTC()
  1172. {
  1173. }
  1174. virtual ~CExtWTC()
  1175. {
  1176. }
  1177. virtual bool UpdateContent( HTREEITEM hti, bool bCompleteRescan )
  1178. {
  1179. ASSERT_VALID( this );
  1180. hti;
  1181. bCompleteRescan;
  1182. ASSERT( FALSE ); // this method should be overridden
  1183. return false;
  1184. }
  1185. virtual void UpdateRootContent()
  1186. {
  1187. ASSERT_VALID( this );
  1188. PreExpandItem( TVI_ROOT );
  1189. Expand( TVI_ROOT, TVE_EXPAND );
  1190. SCROLLINFO _si;
  1191. GetScrollInfo( SB_HORZ, &_si );
  1192. EnsureVisible( GetChildItem( TVI_ROOT ) );
  1193. SetScrollInfo( SB_HORZ, &_si, FALSE );
  1194. }
  1195. virtual void PreExpandItem( HTREEITEM hti )
  1196. {
  1197. hti;
  1198. }
  1199. virtual BOOL Expand( HTREEITEM hti, UINT nCode )
  1200. {
  1201. ASSERT_VALID( this );
  1202. if( nCode == TVE_COLLAPSE
  1203. || ( nCode == TVE_TOGGLE && TreeItemIsExpanded( hti ) )
  1204. )
  1205. {
  1206. _DeleteChildren( hti );
  1207. TVITEM _tvi;
  1208. _tvi.hItem = hti;
  1209. _tvi.mask = TVIF_HANDLE|TVIF_CHILDREN;
  1210. _tvi.cChildren = 1;
  1211. SetItem( &_tvi );
  1212.   SetItemState( hti, 0, TVIS_EXPANDED );
  1213. return CExtTreeCtrl::Expand( hti, nCode );
  1214. }
  1215. //CWaitCursor _waitCursor;
  1216. bool bCheckChildren = UpdateContent( hti, true );
  1217. if( hti != TVI_ROOT )
  1218. {
  1219. TVITEM _tvi;
  1220. _tvi.hItem = hti;
  1221. _tvi.mask = TVIF_HANDLE | TVIF_CHILDREN;
  1222. _tvi.cChildren = _NeedsChildren( hti ) ? 0 : 1;
  1223. if( bCheckChildren )
  1224. SetItem( &_tvi );
  1225. else if ( _tvi.cChildren == 0 )
  1226. SetItemState( hti, 0, TVIS_EXPANDED );
  1227. }
  1228. _BT::Expand( hti, TVE_EXPAND );
  1229. return TRUE;
  1230. }
  1231. virtual void RefreshSubItems( HTREEITEM hti )
  1232. {
  1233. ASSERT_VALID( this );
  1234. if( hti != TVI_ROOT
  1235. && ( ! ItemHasChildren( hti ) )
  1236. )
  1237. return;
  1238. _DeleteChildren( hti );
  1239. if( hti == TVI_ROOT )
  1240. UpdateRootContent();
  1241. else
  1242. {
  1243. PreExpandItem( hti );
  1244. Expand( hti, TVE_EXPAND );
  1245. }
  1246. }
  1247. }; /// class CExtWTC
  1248. #endif // ( ! defined __EXT_MFC_NO_TREE_VIEW_CTRL )
  1249. #if (! defined __EXT_MFC_NO_MSG_BOX )
  1250. //////////////////////////////////////////////////////////////////////////////
  1251. // CExtMsgBox window
  1252. // first group of message box flags uses same values as in Win32
  1253. #define __EXT_MB_OK 0x00000000L
  1254. #define __EXT_MB_OKCANCEL 0x00000001L
  1255. #define __EXT_MB_ABORTRETRYIGNORE 0x00000002L
  1256. #define __EXT_MB_YESNOCANCEL 0x00000003L
  1257. #define __EXT_MB_YESNO 0x00000004L
  1258. #define __EXT_MB_RETRYCANCEL 0x00000005L
  1259. #define __EXT_MB_CANCELTRYCONTINUE 0x00000006L
  1260. #define __EXT_MB_ICONHAND 0x00000010L
  1261. #define __EXT_MB_ICONQUESTION 0x00000020L
  1262. #define __EXT_MB_ICONEXCLAMATION 0x00000030L
  1263. #define __EXT_MB_ICONASTERISK 0x00000040L
  1264. #define __EXT_MB_ICONWARNING __EXT_MB_ICONEXCLAMATION
  1265. #define __EXT_MB_ICONERROR __EXT_MB_ICONHAND
  1266. #define __EXT_MB_ICONINFORMATION __EXT_MB_ICONASTERISK
  1267. #define __EXT_MB_ICONSTOP __EXT_MB_ICONHAND
  1268. #define __EXT_MB_DEFBUTTON1 0x00000000L
  1269. #define __EXT_MB_DEFBUTTON2 0x00000100L
  1270. #define __EXT_MB_DEFBUTTON3 0x00000200L
  1271. #define __EXT_MB_DEFBUTTON4 0x00000300L
  1272. #define __EXT_MB_SYSTEMMODAL 0x00001000L
  1273. #define __EXT_MB_HELP 0x00004000L
  1274. #define __EXT_MB_SETFOREGROUND 0x00010000L
  1275. #define __EXT_MB_TOPMOST 0x00040000L
  1276. #define __EXT_MB_RIGHT 0x00080000L
  1277. #define __EXT_MB_RTLREADING 0x00100000L
  1278. // masks
  1279. #define __EXT_MB_TYPEMASK 0x0000000FL
  1280. #define __EXT_MB_ICONMASK 0x000000F0L
  1281. #define __EXT_MB_DEFMASK 0x00000F00L
  1282. #define __EXT_MB_MODEMASK 0x00003000L
  1283. #define __EXT_MB_MISCMASK 0x0000C000L
  1284. // second group of message box flags defines extended features
  1285. #define __EXT_MB_DEFBUTTON5 0x00000400L
  1286. #define __EXT_MB_DEFBUTTON6 0x00000500L
  1287. #define __EXT_MB_CONTINUEABORT 0x00000007L
  1288. #define __EXT_MB_SKIPSKIPALLCANCEL 0x00000008L
  1289. #define __EXT_MB_IGNOREIGNOREALLCANCEL 0x00000009L
  1290. #define __EXT_MB_DO_NOT_DISPLAY_AGAIN 0x01000000L
  1291. #define __EXT_MB_DO_NOT_ASK_AGAIN 0x02000000L
  1292. #define __EXT_MB_CHECK_BOX_PRESENT (__EXT_MB_DO_NOT_DISPLAY_AGAIN|__EXT_MB_DO_NOT_ASK_AGAIN)
  1293. #define __EXT_MB_YES_TO_ALL 0x04000000L
  1294. #define __EXT_MB_NO_TO_ALL 0x08000000L
  1295. // use right aligned buttons at bottom
  1296. #define __EXT_MB_RIGHT_ALIGN 0x10000000L
  1297. // do not pay sound
  1298. #define __EXT_MB_NO_SOUND 0x20000000L
  1299. #define __EXT_MB_USER_DEFINED_01 0x40000000L
  1300. #define __EXT_MB_USER_DEFINED_00 0x80000000L
  1301. #define __EXT_MB_DEFAULT_STYLES (MB_OK)
  1302. // do not apply default icon if there is no __EXT_MB_ICON*** style specified
  1303. #define __EXT_MB_EX_NO_DEFAULT_ICON_STYLE 0x00000001L
  1304. // display Copy button for copying message text to clipboard as rightmost button
  1305. #define __EXT_MB_EX_COPY_BUTTON 0x00000002L
  1306. // display Copy button as leftmost
  1307. #define __EXT_MB_EX_COPY_BTN_FIRST 0x00000004L
  1308. // display read only edit control with message text instead of label control
  1309. #define __EXT_MB_EX_USE_EDIT_CONTROL 0x00000008L
  1310. // use scrollable edit control
  1311. #define __EXT_MB_EX_SCROLLABLE_EDIT 0x00000010L
  1312. // disable copying message text to clipboard on Ctrl+C and Ctrl+Insert
  1313. #define __EXT_MB_EX_DISABLE_KEYBOARD_COPY_ACCEL 0x00000020L
  1314. // check box is not checked initially
  1315. #define __EXT_MB_EX_CHECK_BOX_IS_NOT_CHECKED_INTIALLY 0x00000040L
  1316. #define __EXT_MB_EX_USER_DEFINED_24 0x00000080L
  1317. #define __EXT_MB_EX_USER_DEFINED_23 0x00000100L
  1318. #define __EXT_MB_EX_USER_DEFINED_22 0x00000200L
  1319. #define __EXT_MB_EX_USER_DEFINED_21 0x00000400L
  1320. #define __EXT_MB_EX_USER_DEFINED_20 0x00000800L
  1321. #define __EXT_MB_EX_USER_DEFINED_19 0x00001000L
  1322. #define __EXT_MB_EX_USER_DEFINED_18 0x00002000L
  1323. #define __EXT_MB_EX_USER_DEFINED_17 0x00004000L
  1324. #define __EXT_MB_EX_USER_DEFINED_16 0x00008000L
  1325. #define __EXT_MB_EX_USER_DEFINED_15 0x00010000L
  1326. #define __EXT_MB_EX_USER_DEFINED_14 0x00020000L
  1327. #define __EXT_MB_EX_USER_DEFINED_13 0x00040000L
  1328. #define __EXT_MB_EX_USER_DEFINED_12 0x00080000L
  1329. #define __EXT_MB_EX_USER_DEFINED_11 0x00100000L
  1330. #define __EXT_MB_EX_USER_DEFINED_10 0x00200000L
  1331. #define __EXT_MB_EX_USER_DEFINED_09 0x00400000L
  1332. #define __EXT_MB_EX_USER_DEFINED_08 0x00800000L
  1333. #define __EXT_MB_EX_USER_DEFINED_07 0x01000000L
  1334. #define __EXT_MB_EX_USER_DEFINED_06 0x02000000L
  1335. #define __EXT_MB_EX_USER_DEFINED_05 0x04000000L
  1336. #define __EXT_MB_EX_USER_DEFINED_04 0x08000000L
  1337. #define __EXT_MB_EX_USER_DEFINED_03 0x10000000L
  1338. #define __EXT_MB_EX_USER_DEFINED_02 0x20000000L
  1339. #define __EXT_MB_EX_USER_DEFINED_01 0x40000000L
  1340. #define __EXT_MB_EX_USER_DEFINED_00 0x80000000L
  1341. #define __EXT_MB_EX_DEFAULT_STYLES (0)
  1342. // first group of message box button identifiers uses same values as in Win32
  1343. #define ID_EXT_MBB_OK 1
  1344. #define ID_EXT_MBB_CANCEL 2
  1345. #define ID_EXT_MBB_ABORT 3
  1346. #define ID_EXT_MBB_RETRY 4
  1347. #define ID_EXT_MBB_IGNORE 5
  1348. #define ID_EXT_MBB_YES 6
  1349. #define ID_EXT_MBB_NO 7
  1350. #define ID_EXT_MBB_CLOSE 8
  1351. #define ID_EXT_MBB_HELP 9
  1352. #define ID_EXT_MBB_TRY_AGAIN 10
  1353. #define ID_EXT_MBB_CONTINUE 11
  1354. // second group of message box button identifiers defines extended features
  1355. #define ID_EXT_MBB_YES_TO_ALL 14
  1356. #define ID_EXT_MBB_NO_TO_ALL 15
  1357. #define ID_EXT_MBB_SKIP 16
  1358. #define ID_EXT_MBB_SKIP_ALL 17
  1359. #define ID_EXT_MBB_IGNORE_ALL 18
  1360. #define ID_EXT_MBB_CHECK_BOX 19
  1361. #define ID_EXT_MBB_EX_COPY_BUTTON 20
  1362. // constants (not styles) defining default margins, paddings and colors used by CExtMsgBox box parts
  1363. #define __EXT_MSG_BOX_DEFAULT_WINDOW_BORDER_WIDTH 8
  1364. #define __EXT_MSG_BOX_DEFAULT_WINDOW_BORDER_HEIGHT 8
  1365. #define __EXT_MSG_BOX_DEFAULT_BUTTON_BORDER_WIDTH 5
  1366. #define __EXT_MSG_BOX_DEFAULT_BUTTON_BORDER_HEIGHT 1
  1367. #define __EXT_MSG_BOX_DEFAULT_BUTTON_WIDTH 50
  1368. #define __EXT_MSG_BOX_DEFAULT_BUTTON_HEIGHT 12
  1369. #define __EXT_MSG_BOX_DEFAULT_EDITOR_MIN_HEIGHT_PX 32
  1370. #define __EXT_MSG_BOX_DEFAULT_EDITOR_MAX_HEIGHT_PX 80
  1371. #define __EXT_MSG_BOX_DEFAULT_EDITOR_COLOR_TEXT RGB(0,0,0)
  1372. #define __EXT_MSG_BOX_DEFAULT_EDITOR_COLOR_BKGND RGB(255,255,255)
  1373. #define __EXT_MSG_BOX_CHECK_BOX_ADDITIONAL_SPACE 14
  1374. #define __EXT_MSG_BOX_BTN_SPACE 6
  1375. class __PROF_UIS_API CExtMsgBox
  1376. : public 
  1377. #if ( _MFC_VER == 0x700 )
  1378. CExtResizableDialog
  1379. #else
  1380. CExtNCW < CExtResizableDialog >
  1381. #endif
  1382. {
  1383. protected:
  1384. CExtSafeString m_strCaption, m_strMessageText, m_strUniqueID;
  1385. UINT m_nMsgBoxStyle, m_nMsgBoxStyleEx, m_nHelpID, m_nTimeoutSeconds, m_nTimeoutTimer, m_nDefaultButtonDlgCtrlID, m_nEscapeButtonDlgCtrlID;
  1386. bool m_bIsDisabledTimeout:1, m_bDynamicIcon:1;
  1387. struct __PROF_UIS_API msgbox_button_info_t
  1388. {
  1389. UINT m_nButtonDlgCtrlID;
  1390. CExtSafeString m_strCaption;
  1391. msgbox_button_info_t(
  1392. UINT nButtonDlgCtrlID,
  1393. __EXT_MFC_SAFE_LPCTSTR strCaption
  1394. )
  1395. : m_nButtonDlgCtrlID( nButtonDlgCtrlID )
  1396. , m_strCaption( LPCTSTR(strCaption) )
  1397. {
  1398. }
  1399. };
  1400. CTypedPtrArray < CPtrArray, msgbox_button_info_t * > m_arrMsgBoxButtons;
  1401. CExtLabel m_wndLabelMsgBoxIcon, m_wndLabelMsgBoxMessageText;
  1402. CExtNCSB < CExtEdit > m_wndEditMsgBoxMessageText;
  1403. CSize m_sizeButton, m_sizeCheckBox, m_sizeMessageText, m_sizeBorder, m_sizeStdButton, m_sizeStdButtonBorder;
  1404. INT m_nCheckBoxGap, m_nButtonSpace, m_nMinEditCtrlHeight, m_nMaxEditCtrlHeight;
  1405. HWND m_hWndParentFromCTOR;
  1406. public:
  1407. COLORREF m_clrEditorText, m_clrEditorBkgnd;
  1408. static __EXT_MFC_SAFE_LPCTSTR g_strRegSectionName;
  1409. CExtBitmap m_bmpIcon;
  1410. DECLARE_DYNCREATE( CExtMsgBox );
  1411. CExtMsgBox(
  1412. HWND hWndParent = NULL,
  1413. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1414. );
  1415. CExtMsgBox(
  1416. HWND hWndParent,
  1417. __EXT_MFC_SAFE_LPCTSTR strMessageText,
  1418. __EXT_MFC_SAFE_LPCTSTR strCaption = NULL,
  1419. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1420. UINT nHelpID = 0,
  1421. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1422. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES
  1423. );
  1424. CExtMsgBox(
  1425. HWND hWndParent,
  1426. UINT nMessageResourceID,
  1427. UINT nCaptionResourceID = 0,
  1428. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1429. UINT nHelpID = 0,
  1430. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1431. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES
  1432. );
  1433. virtual ~CExtMsgBox();
  1434. //{{AFX_DATA(CExtMsgBox)
  1435. //}}AFX_DATA
  1436. protected:
  1437. //{{AFX_VIRTUAL(CExtMsgBox)
  1438. protected:
  1439. virtual void DoDataExchange( CDataExchange * pDX );
  1440. virtual BOOL OnInitDialog();
  1441. virtual BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT * pResult );
  1442. public:
  1443. virtual BOOL OnCmdMsg( UINT nID, int nCode, void * pExtra, AFX_CMDHANDLERINFO * pHandlerInfo );
  1444. virtual BOOL PreTranslateMessage( MSG * pMsg );
  1445. //}}AFX_VIRTUAL
  1446. protected:
  1447. void _AddDefaultIconStyle();
  1448. public:
  1449. virtual UINT MsgBoxStyleGet() const;
  1450. virtual void MsgBoxStyleSet( UINT nMsgBoxStyle );
  1451. virtual UINT MsgBoxStyleExGet() const;
  1452. virtual void MsgBoxStyleExSet( UINT nMsgBoxStyleEx );
  1453. virtual INT MinEditCtrlHeightGet() const;
  1454. virtual void MinEditCtrlHeightSet( INT nMaxEditCtrlHeight );
  1455. virtual INT MaxEditCtrlHeightGet() const;
  1456. virtual void MaxEditCtrlHeightSet( INT nMaxEditCtrlHeight );
  1457. virtual CExtSafeString MessageGet() const;
  1458. virtual void MessageSet( __EXT_MFC_SAFE_LPCTSTR strMessageText );
  1459. void MessageSet( UINT nMessageResourceID );
  1460. virtual CExtSafeString CaptionGet() const;
  1461. virtual void CaptionSet( __EXT_MFC_SAFE_LPCTSTR strCaption );
  1462. void CaptionSet( UINT nCaptionResourceID );
  1463. virtual UINT TimeoutGet(
  1464. bool * p_bIsDisabledTimeout = NULL
  1465. ) const;
  1466. virtual void TimeoutSet(
  1467. UINT nTimeoutSeconds,
  1468. bool bIsDisabledTimeout = false
  1469. );
  1470. bool IsDisabledTimeout() const;
  1471. static int DoMsgBox(
  1472. HWND hWndParent,
  1473. UINT nMessageResourceID,
  1474. UINT nCaptionResourceID = 0,
  1475. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1476. UINT nHelpID = 0,
  1477. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1478. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES,
  1479. UINT nTimeoutSeconds = 0,
  1480. bool bIsDisabledTimeout = false,
  1481. CExtBitmap * pBmpIcon = NULL
  1482. );
  1483. static int DoMsgBox(
  1484. HWND hWndParent,
  1485. __EXT_MFC_SAFE_LPCTSTR strMessageText, 
  1486. __EXT_MFC_SAFE_LPCTSTR strCaption = NULL,
  1487. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1488. UINT nHelpID = 0,
  1489. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1490. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES,
  1491. UINT nTimeoutSeconds = 0,
  1492. bool bIsDisabledTimeout = false,
  1493. CExtBitmap * pBmpIcon = NULL
  1494. );
  1495. virtual __EXT_MFC_INT_PTR DoModal();
  1496. void EndDialog( int nResult );
  1497. virtual void RegisterButton(
  1498. UINT nButtonDlgCtrlID,
  1499. __EXT_MFC_SAFE_LPCTSTR strCaption,
  1500. bool bIsDefault = false,
  1501. bool bIsEscape = false
  1502. );
  1503. void RegisterButton(
  1504. UINT nButtonDlgCtrlID,
  1505. UINT nCaptionResourceID,
  1506. bool bIsDefault = false,
  1507. bool bIsEscape = false
  1508. );
  1509. virtual void UnRegisterAllButtons();
  1510. static void ResetAllMsgBoxes();
  1511. void ResetMsgBox();
  1512. virtual CExtSafeString OnMsgBoxGetRegVarName() const; // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1513. protected:
  1514. virtual bool OnMsgBoxTimeoutDecrease();
  1515. virtual void OnMsgBoxRegisterButtons();
  1516. virtual bool OnMsgBoxCreateIconLabel();
  1517. virtual bool OnMsgBoxCreateMessageLabel();
  1518. virtual bool OnMsgBoxCreateCheckBox();
  1519. virtual bool OnMsgBoxCreateButtons();
  1520. virtual void OnMsgBoxLayout();
  1521. virtual bool OnMsgBoxCopyToClipboard();
  1522. virtual void OnMsgBoxHelp();
  1523. protected:
  1524. //{{AFX_MSG(CExtMsgBox)
  1525. //}}AFX_MSG
  1526. afx_msg void OnTimer( __EXT_MFC_UINT_PTR nIDEvent );
  1527. DECLARE_MESSAGE_MAP()
  1528. }; // class CExtMsgBox
  1529. int __PROF_UIS_API ProfUISMsgBox(
  1530. HWND hWndParent,
  1531. UINT nMessageResourceID,
  1532. UINT nCaptionResourceID = 0,
  1533. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1534. UINT nHelpID = 0,
  1535. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1536. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES,
  1537. UINT nTimeoutSeconds = 0,
  1538. bool bIsDisabledTimeout = false,
  1539. CExtBitmap * pBmpIcon = NULL
  1540. );
  1541. int __PROF_UIS_API ProfUISMsgBox(
  1542. HWND hWndParent,
  1543. __EXT_MFC_SAFE_LPCTSTR strMessageText, 
  1544. __EXT_MFC_SAFE_LPCTSTR strCaption = NULL,
  1545. UINT nMsgBoxStyle = __EXT_MB_DEFAULT_STYLES,
  1546. UINT nHelpID = 0,
  1547. __EXT_MFC_SAFE_LPCTSTR strUniqueID = NULL, // for __EXT_MB_DO_NOT_DISPLAY_AGAIN and __EXT_MB_DO_NOT_ASK_AGAIN
  1548. UINT nMsgBoxStyleEx = __EXT_MB_EX_DEFAULT_STYLES,
  1549. UINT nTimeoutSeconds = 0,
  1550. bool bIsDisabledTimeout = false,
  1551. CExtBitmap * pBmpIcon = NULL
  1552. );
  1553. #define IMPLEMENT_CWinAPP_DoMessageBox 
  1554. virtual int DoMessageBox( LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt ) 
  1555. HWND hWndParent = ::GetActiveWindow(); 
  1556. if( hWndParent == NULL ) 
  1557. CWnd * pMainWnd = GetMainWnd(); 
  1558. if( pMainWnd->GetSafeHwnd() != NULL ) 
  1559. hWndParent = ::GetLastActivePopup( pMainWnd->m_hWnd ); 
  1560. return ::ProfUISMsgBox( hWndParent, lpszPrompt, _T(""), nType, nIDPrompt ); 
  1561. }
  1562. #endif // (! defined __EXT_MFC_NO_MSG_BOX )
  1563. /////////////////////////////////////////////////////////////////////////////
  1564. //{{AFX_INSERT_LOCATION}}
  1565. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  1566. #endif // (!defined __EXT_CONTROLS_COMMON_H)