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

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertyGridView.h interface for the CXTPPropertyGridView class.
  2. //
  3. // This file is a part of the XTREME PROPERTYGRID MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPPROPERTYGRIDVIEW_H__)
  22. #define __XTPPROPERTYGRIDVIEW_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPPropertyGridPaintManager.h"
  28. #include "Common/XTPSystemHelpers.h"
  29. class CXTPPropertyGridView;
  30. class CXTPPropertyGridPaintManager;
  31. class CXTPPropertyGrid;
  32. class CXTPImageManager;
  33. //===========================================================================
  34. // Summary:
  35. //     CXTPPropertyGridToolTip is a CWnd derived class.
  36. //     It is an internal class used by Property Grid control
  37. //===========================================================================
  38. class _XTP_EXT_CLASS CXTPPropertyGridToolTip : public CWnd
  39. {
  40. public:
  41. //-----------------------------------------------------------------------
  42. // Summary:
  43. //     Constructs a CXTPPropertyGridToolTip object
  44. //-----------------------------------------------------------------------
  45. CXTPPropertyGridToolTip();
  46. //-----------------------------------------------------------------------
  47. // Summary:
  48. //     Activate Tooltip control.
  49. // Parameters:
  50. //     bActive - TRUE to activate.
  51. //     pItem   - Item which tooltip to show
  52. //     bValuePart - TRUE if tooltip of value part will be visible
  53. //-----------------------------------------------------------------------
  54. void Activate(BOOL bActive, CXTPPropertyGridItem* pItem, BOOL bValuePart);
  55. //-----------------------------------------------------------------------
  56. // Summary:
  57. //     Creates Tooltip control.
  58. // Parameters:
  59. //     pParentWnd - Points to a CXTPPropertyGridView object.
  60. //-----------------------------------------------------------------------
  61. void Create(CXTPPropertyGridView* pParentWnd);
  62. protected:
  63. //{{AFX_CODEJOCK_PRIVATE
  64. DECLARE_MESSAGE_MAP()
  65. //{{AFX_MSG(CXTPPropertyGridView)
  66. afx_msg BOOL OnEraseBkgnd(CDC*);
  67. afx_msg void OnPaint();
  68. afx_msg LRESULT OnNcHitTest(CPoint point);
  69. //}}AFX_MSG
  70. //}}AFX_CODEJOCK_PRIVATE
  71. private:
  72. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  73. protected:
  74. CXTPPropertyGridView* m_pGrid;      // Parent window.
  75. CFont m_fnt;                        // Font used to display the tool tip
  76. friend class CXTPPropertyGridView;
  77. };
  78. AFX_INLINE BOOL CXTPPropertyGridToolTip::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  79. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  80. }
  81. //===========================================================================
  82. // Summary:
  83. //     CXTPPropertyGridView is a CListBox derived class.
  84. //     It is an internal class used by Property Grid control
  85. //===========================================================================
  86. class _XTP_EXT_CLASS CXTPPropertyGridView : public CListBox, public CXTPAccessible
  87. {
  88. struct WNDRECT;
  89. DECLARE_DYNAMIC(CXTPPropertyGridView)
  90. public:
  91. //-----------------------------------------------------------------------
  92. // Summary:
  93. //     Constructs a CXTPPropertyGridView object
  94. //-----------------------------------------------------------------------
  95. CXTPPropertyGridView();
  96. //-----------------------------------------------------------------------
  97. // Summary:
  98. //     Destroys a CXTPPropertyGridView object, handles cleanup and
  99. //     deallocation.
  100. //-----------------------------------------------------------------------
  101. virtual ~CXTPPropertyGridView();
  102. public:
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Call this method to get the position of the divider.
  106. // Returns:
  107. //     Position of the divider
  108. //-----------------------------------------------------------------------
  109. int GetDividerPos() const;
  110. //-----------------------------------------------------------------------
  111. // Summary:
  112. //     Call this method to set the position of the divider.
  113. // Parameters:
  114. //     nDivider - Position of the divider
  115. //-----------------------------------------------------------------------
  116. void SetDividerPos(int nDivider);
  117. //-----------------------------------------------------------------------
  118. // Summary:
  119. //     Call this method to disable auto calculating divider position
  120. //-----------------------------------------------------------------------
  121. void LockDivider();
  122. //-----------------------------------------------------------------------
  123. // Summary:
  124. //     This method determines where a point lies in a specified item.
  125. // Parameters:
  126. //     point - Specifies the point to be tested.
  127. // Returns:
  128. //     A pointer to a CXTPPropertyGridItem object
  129. //-----------------------------------------------------------------------
  130. CXTPPropertyGridItem* ItemFromPoint(CPoint point) const;
  131. //-----------------------------------------------------------------------
  132. // Summary:
  133. //     Call this method to refresh items in the list.
  134. //-----------------------------------------------------------------------
  135. void Refresh();
  136. //-----------------------------------------------------------------------
  137. // Summary:
  138. //     Call this method to remove all items in the list.
  139. //-----------------------------------------------------------------------
  140. void ResetContent();
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     This method retrieves an item with the specified index.
  144. // Parameters:
  145. //     nIndex - Specifies the zero-based index of the item to retrieve.
  146. // Returns:
  147. //     A pointer to a CXTPPropertyGridItem object
  148. //-----------------------------------------------------------------------
  149. CXTPPropertyGridItem* GetItem(int nIndex) const;
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     Call this member function to add a new category to a Property
  153. //     Grid Control.
  154. // Parameters:
  155. //     strCaption - Name of the category to add.
  156. //     pCategory  - Points to a CXTPPropertyGridItem object.
  157. // Returns:
  158. //     A pointer to a CXTPPropertyGridItem object.
  159. //-----------------------------------------------------------------------
  160. CXTPPropertyGridItem* AddCategory(LPCTSTR strCaption, CXTPPropertyGridItem* pCategory = NULL);
  161. //-----------------------------------------------------------------------
  162. // Summary:
  163. //     Call this member function to insert a new category to the Property Grid control.
  164. // Parameters:
  165. //     strCaption - Name of the category to add.
  166. //     nIndex     - Index of category to be inserted
  167. //     pCategory  - Points to a CXTPPropertyGridItem object.
  168. // Returns:
  169. //     The pointer to the item object of the newly inserted category.
  170. //-----------------------------------------------------------------------
  171. CXTPPropertyGridItem* InsertCategory(int nIndex, LPCTSTR strCaption, CXTPPropertyGridItem* pCategory = NULL);
  172. //-----------------------------------------------------------------------
  173. // Summary:
  174. //     Returns the currently used control's Paint Manager.
  175. // Remarks:
  176. //     Call this member function to get the paint manager object used
  177. //     for drawing a property grid control window.
  178. // Returns:
  179. //     Pointer to the paint manager object.
  180. //-----------------------------------------------------------------------
  181. CXTPPropertyGridPaintManager* GetPaintManager() const;
  182. //-----------------------------------------------------------------------
  183. // Summary:
  184. //     Retrieves Image manager associated with property grid
  185. // Returns:
  186. //     Pointer to the image manager object that stores the images in
  187. //     the property grid.
  188. //-----------------------------------------------------------------------
  189. CXTPImageManager* GetImageManager() const;
  190. //-----------------------------------------------------------------------
  191. // Summary:
  192. //     Sends the specified message to the owner window.
  193. // Parameters:
  194. //     wParam - Specifies additional message-dependent information.
  195. //     lParam - Specifies additional message-dependent information
  196. // Returns:
  197. //     The result of the message processing; its value depends on the message sent.
  198. //-----------------------------------------------------------------------
  199. LRESULT SendNotifyMessage(WPARAM wParam = 0, LPARAM lParam = 0);
  200. //-----------------------------------------------------------------------
  201. // Summary:
  202. //     Call this method to get parent property grid class
  203. // Returns:
  204. //     Returns parent CXTPPropertyGrid object.
  205. //-----------------------------------------------------------------------
  206. CXTPPropertyGrid* GetPropertyGrid() const;
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     This method is called to move focus to in-place button
  210. // Parameters:
  211. //     pButton - Button to move focus
  212. //-----------------------------------------------------------------------
  213. void FocusInplaceButton(CXTPPropertyGridInplaceButton* pButton);
  214. protected:
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     This method is called to show tooltip under item
  218. // Parameters:
  219. //     pt - Mouse position
  220. //-----------------------------------------------------------------------
  221. virtual void ShowToolTip(CPoint pt);
  222. protected:
  223. //{{AFX_CODEJOCK_PRIVATE
  224. DECLARE_MESSAGE_MAP()
  225. //{{AFX_VIRTUAL(CXTPPropertyGridView)
  226. virtual void DrawItem(LPDRAWITEMSTRUCT);
  227. virtual void MeasureItem(LPMEASUREITEMSTRUCT);
  228. virtual int CompareItem(LPCOMPAREITEMSTRUCT) { return 0;}
  229. virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  230. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  231. //}}AFX_VIRTUAL
  232. //{{AFX_MSG(CXTPPropertyGridView)
  233. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  234. afx_msg void OnPaint();
  235. afx_msg void OnNcPaint();
  236. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
  237. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  238. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  239. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  240. afx_msg void OnSelectionChanged();
  241. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  242. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  243. afx_msg void OnCaptureChanged(CWnd* pWnd);
  244. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  245. afx_msg void OnSize(UINT nType, int cx, int cy);
  246. afx_msg void OnChar(UINT nChar, UINT nRepCntr, UINT nFlags);
  247. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  248. afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  249. afx_msg UINT OnGetDlgCode();
  250. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  251. afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  252. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  253. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  254. afx_msg void OnSetFocus(CWnd* pOldWnd);
  255. afx_msg void OnKillFocus (CWnd* pNewWnd);
  256. afx_msg LRESULT OnGetObject(WPARAM wParam, LPARAM lParam);
  257. //}}AFX_MSG
  258. //}}AFX_CODEJOCK_PRIVATE
  259. protected:
  260. //{{AFX_CODEJOCK_PRIVATE
  261. // System accessibility support.
  262. virtual HRESULT GetAccessibleParent(IDispatch** ppdispParent);
  263. virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
  264. virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
  265. virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
  266. virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
  267. virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
  268. virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
  269. virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
  270. virtual CCmdTarget* GetAccessible();
  271. DECLARE_INTERFACE_MAP()
  272. //}}AFX_CODEJOCK_PRIVATE
  273. private:
  274. CXTPPropertyGridItem* GetSelectedItem();
  275. void SetPropertySort(XTPPropertyGridSortOrder sort, BOOL bRrefresh = FALSE, BOOL bSetRedraw = TRUE);
  276. int InsertItem(CXTPPropertyGridItem* pItem, int nIndex);
  277. int _DoExpand(CXTPPropertyGridItem* pItem, int nIndex);
  278. void _DoCollapse(CXTPPropertyGridItem* pItem);
  279. void _RefreshIndexes();
  280. void SwitchExpandState(int nItem);
  281. int HitTest(CPoint point) const;
  282. void _ShowToolTip(CRect rcBound, CRect rcText, CXTPPropertyGridItem* pItem, BOOL bValuePart);
  283. CSize _GetTextExtent(const CString& str, CXTPPropertyGridItem* pItem, BOOL bValuePart);
  284. void RelayToolTipEvent(UINT message);
  285. LRESULT OnScrollControl();
  286. protected:
  287. CXTPPropertyGrid*             m_pGrid;              // Parent CXTPPropertyGrid class.
  288. BOOL                          m_bTracking;          // TRUE if grid in tracking mode.
  289. CRect                         m_rcToolTip;          // Position of the Tooltip.
  290. double                        m_dDivider;           // Divider position.
  291. BOOL                          m_bAutoDivider;       // TRUE to auto calculate divider
  292. HCURSOR                       m_hCursor;            // Handle of the cursor.
  293. CString                       m_strTipText;         // Tooltip text.
  294. XTPPropertyGridSortOrder      m_properetySort;      // Current sort order.
  295. CXTPPropertyGridItem*         m_pSelected;          // Current selected item.
  296. CXTPPropertyGridItems*        m_pCategories;        // Collection of the categories.
  297. CXTPPropertyGridToolTip       m_wndTip;             // Tooltip control.
  298. int                           m_nLockUpdate;        // TRUE to lock update.
  299. UINT                          m_nItemHeight;        // Default height of the item
  300. BOOL                          m_bVariableSplitterPos;   // TRUE to allow the user to resize the splitter with the mouse.
  301. CXTPPropertyGridInplaceButton* m_pFocusedButton;    // Currently focused button
  302. CXTPPropertyGridInplaceButton* m_pHotButton;        // Currently highlighted button
  303. private:
  304. friend class CXTPPropertyGridItem;
  305. friend class CXTPPropertyGridItems;
  306. friend class CXTPPropertyGrid;
  307. friend class CXTPPropertyGridInplaceEdit;
  308. friend class CPropertyGridCtrl;
  309. friend class CXTPPropertyGridToolTip;
  310. friend class CXTPPropertyGridInplaceButton;
  311. };
  312. AFX_INLINE CXTPPropertyGrid* CXTPPropertyGridView::GetPropertyGrid() const {
  313. return  m_pGrid;
  314. }
  315. #endif // #if !defined(__XTPPROPERTYGRIDVIEW_H__)