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

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertyGridInplaceEdit.h interface for the CXTPPropertyGridInplaceEdit 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(__XTPPROPERTYGRIDINPLACEEDIT_H__)
  22. #define __XTPPROPERTYGRIDINPLACEEDIT_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. // class forwards.
  28. #include "Common/XTMaskEditT.h"
  29. class CXTPPropertyGridView;
  30. class CXTPPropertyGridItem;
  31. //===========================================================================
  32. // Summary:
  33. //     CXTPPropertyGridInplaceEdit is a CEdit derived class.
  34. //     It is an internal class used by Property Grid control.
  35. //===========================================================================
  36. class _XTP_EXT_CLASS CXTPPropertyGridInplaceEdit : public CXTMaskEditT<CEdit>
  37. {
  38. DECLARE_DYNAMIC(CXTPPropertyGridInplaceEdit)
  39. public:
  40. //-----------------------------------------------------------------------
  41. // Summary:
  42. //     Constructs a CXTPPropertyGridInplaceEdit object
  43. //-----------------------------------------------------------------------
  44. CXTPPropertyGridInplaceEdit();
  45. //-----------------------------------------------------------------------
  46. // Summary:
  47. //     Destroys a CXTPPropertyGridInplaceEdit object, handles cleanup
  48. //     and deallocation.
  49. //-----------------------------------------------------------------------
  50. virtual ~CXTPPropertyGridInplaceEdit();
  51. //-----------------------------------------------------------------------
  52. // Summary:
  53. //     Call this method to set edit text value.
  54. // Parameters:
  55. //     strValue - String value.
  56. //-----------------------------------------------------------------------
  57. virtual void SetValue(LPCTSTR strValue);
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //     Call this method to hide in-place edit control.
  61. //-----------------------------------------------------------------------
  62. virtual void HideWindow();
  63. //-----------------------------------------------------------------------
  64. // Summary:
  65. //     Call this method to create in-place edit control.
  66. // Parameters:
  67. //     pItem - Points to a CXTPPropertyGridItem object
  68. //     rect -  Specifies the size and position of the item.
  69. //-----------------------------------------------------------------------
  70. virtual void Create(CXTPPropertyGridItem* pItem, CRect rect);
  71. //-----------------------------------------------------------------------
  72. // Summary:
  73. //     This method is called when a parent item is destroyed.
  74. //-----------------------------------------------------------------------
  75. virtual void DestroyItem();
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //     This member function retrieves a child property grid item
  79. // Returns:
  80. //     A pointer to a CXTPPropertyGridItem object
  81. //-----------------------------------------------------------------------
  82. CXTPPropertyGridItem* GetItem();
  83. //-----------------------------------------------------------------------
  84. // Summary:
  85. //     Call this method to select a constraint in child item constraint list.
  86. // Parameters:
  87. //     nDirection - Direction of constraint search.
  88. //     bCircle - TRUE to find by cycle.
  89. //-----------------------------------------------------------------------
  90. virtual BOOL SelectConstraint(int nDirection, BOOL bCircle);
  91. private:
  92. CString              m_strValue;
  93. CBrush               m_brBack;
  94. COLORREF             m_clrBack;
  95. CXTPPropertyGridView* m_pGrid;
  96. CXTPPropertyGridItem* m_pItem;
  97. BOOL m_bDelayCreate;
  98. BOOL m_bCreated;
  99. BOOL m_bEditMode;
  100. BOOL m_bCancel;
  101. BOOL m_bCheckAutoComplete;
  102. BOOL m_bIgnoreEditChanged;
  103. protected:
  104. //{{AFX_CODEJOCK_PRIVATE
  105. //{{AFX_VIRTUAL(CXTPPropertyGridInplaceEdit)
  106. virtual BOOL PreTranslateMessage(MSG* pMsg);
  107. //}}AFX_VIRTUAL
  108. //{{AFX_MSG(CXTPPropertyGridInplaceEdit)
  109. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  110. afx_msg void OnEnKillfocus();
  111. afx_msg void OnEnSetfocus();
  112. afx_msg void OnEnChange();
  113. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  114. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  115. afx_msg UINT OnGetDlgCode();
  116. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  117. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  118. void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct);
  119. //}}AFX_MSG
  120. //}}AFX_CODEJOCK_PRIVATE
  121. private:
  122. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  123. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  124. DECLARE_MESSAGE_MAP()
  125. friend class CXTPPropertyGridItem;
  126. friend class CXTPPropertyGrid;
  127. };
  128. //===========================================================================
  129. // Summary:
  130. //     CXTPPropertyGridInplaceControl is CWnd derived class, represents base class for all item in place controls.
  131. //===========================================================================
  132. class _XTP_EXT_CLASS CXTPPropertyGridInplaceControl : public CWnd
  133. {
  134. public:
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     Constructs a CXTPPropertyGridInplaceControl object
  138. // Parameters:
  139. //     pItem - Parent property grid item
  140. //-----------------------------------------------------------------------
  141. CXTPPropertyGridInplaceControl(CXTPPropertyGridItem* pItem);
  142. public:
  143. //-----------------------------------------------------------------------
  144. // Summary:
  145. //     This method is called when item creates its in-place control.
  146. // Parameters:
  147. //     rcValue - Boundary rectangle of control.
  148. // See Also: OnDestroyWindow
  149. //-----------------------------------------------------------------------
  150. virtual void OnCreateWindow(CRect& rcValue) = 0;
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     This method is called when item destroys its in-place control.
  154. // See Also: OnCreateWindow
  155. //-----------------------------------------------------------------------
  156. virtual void OnDestroyWindow();
  157. //-----------------------------------------------------------------------
  158. // Summary:
  159. //     This method is called when item require to calculate its value rectangle
  160. // Parameters:
  161. //     rcValue - Bounding rectangle of value.
  162. // See Also: OnCreateWindow
  163. //-----------------------------------------------------------------------
  164. virtual void OnAdjustValueRect(CRect& rcValue) = 0;
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     This method is called when value of parent item was changed.
  168. //-----------------------------------------------------------------------
  169. virtual void OnValueChanged();
  170. protected:
  171. //{{AFX_CODEJOCK_PRIVATE
  172. DECLARE_MESSAGE_MAP()
  173. virtual void OnFinalRelease();
  174. //{{AFX_MSG(CXTPPropertyGridInplaceControl)
  175. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  176. afx_msg UINT OnGetDlgCode();
  177. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  178. //}}AFX_MSG
  179. //}}AFX_CODEJOCK_PRIVATE
  180. protected:
  181. CXTPPropertyGridItem* m_pItem;          // Parent item pointer
  182. int m_nWidth;                           // Width of in-place item
  183. };
  184. //===========================================================================
  185. // Summary:
  186. //     CXTPPropertyGridInplaceSlider is CXTPPropertyGridInplaceControl derived class.
  187. //     It represents in-place slider of the items. Call  CXTPPropertyGridItem::AddSliderControl() to
  188. //     add slider for property grid item
  189. //===========================================================================
  190. class _XTP_EXT_CLASS CXTPPropertyGridInplaceSlider : public CXTPPropertyGridInplaceControl
  191. {
  192. public:
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     Constructs a CXTPPropertyGridInplaceSlider object
  196. // Parameters:
  197. //     pItem - Parent property grid item
  198. //-----------------------------------------------------------------------
  199. CXTPPropertyGridInplaceSlider(CXTPPropertyGridItem* pItem);
  200. public:
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     This method is called when item creates its in-place control.
  204. // Parameters:
  205. //     rcValue - Boundary rectangle of control.
  206. // See Also: OnDestroyWindow
  207. //-----------------------------------------------------------------------
  208. virtual void OnCreateWindow(CRect& rcValue);
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //     This method is called when item require to calculate its value rectangle
  212. // Parameters:
  213. //     rcValue - Bounding rectangle of value.
  214. // See Also: OnCreateWindow
  215. //-----------------------------------------------------------------------
  216. virtual void OnAdjustValueRect(CRect& rcValue);
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     This method is called when value of parent item was changed.
  220. //-----------------------------------------------------------------------
  221. virtual void OnValueChanged();
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     Retrieves slider control
  225. //-----------------------------------------------------------------------
  226. CSliderCtrl* GetSliderCtrl() const;
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Call this method to set lower range of slider control
  230. // Parameters:
  231. //     nMin - lower range
  232. // See Also: SetMax
  233. //-----------------------------------------------------------------------
  234. void SetMin(int nMin);
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     Call this method to set upper range of slider control
  238. // Parameters:
  239. //     nMax - upper range
  240. // See Also: SetMin
  241. //-----------------------------------------------------------------------
  242. void SetMax(int nMax);
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //     Retrieves lower range of slider control
  246. //-----------------------------------------------------------------------
  247. int GetMin() const;
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Retrieves upper range of slider control
  251. //-----------------------------------------------------------------------
  252. int GetMax() const;
  253. protected:
  254. //{{AFX_CODEJOCK_PRIVATE
  255. DECLARE_MESSAGE_MAP()
  256. int CalcualteEditWidth();
  257. //{{AFX_MSG(CXTPPropertyGridInplaceSlider)
  258. afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
  259. afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
  260. //}}AFX_MSG
  261. //}}AFX_CODEJOCK_PRIVATE
  262. protected:
  263. int m_nMin;         // Lower range
  264. int m_nMax;         // Upper range
  265. int m_nValue;       // Value of slider
  266. private:
  267. COLORREF m_clrBack;
  268. CBrush m_brBack;
  269. };
  270. AFX_INLINE CSliderCtrl* CXTPPropertyGridInplaceSlider::GetSliderCtrl() const {
  271. return (CSliderCtrl*)this;
  272. }
  273. AFX_INLINE void CXTPPropertyGridInplaceSlider::SetMin(int nMin) {
  274. m_nMin = nMin;
  275. }
  276. AFX_INLINE void CXTPPropertyGridInplaceSlider::SetMax(int nMax) {
  277. m_nMax = nMax;
  278. }
  279. AFX_INLINE int CXTPPropertyGridInplaceSlider::GetMin() const {
  280. return m_nMin;
  281. }
  282. AFX_INLINE int CXTPPropertyGridInplaceSlider::GetMax() const {
  283. return m_nMax;
  284. }
  285. //===========================================================================
  286. // Summary:
  287. //     CXTPPropertyGridInplaceSpinButton is CXTPPropertyGridInplaceControl derived class.
  288. //     It represents in-place spin button of the items. Call  CXTPPropertyGridItem::AddSpinButton() to
  289. //     add spin button for property grid item
  290. //===========================================================================
  291. class _XTP_EXT_CLASS CXTPPropertyGridInplaceSpinButton : public CXTPPropertyGridInplaceControl
  292. {
  293. public:
  294. //-----------------------------------------------------------------------
  295. // Summary:
  296. //     Constructs a CXTPPropertyGridInplaceSpinButton object
  297. // Parameters:
  298. //     pItem - Parent property grid item
  299. //-----------------------------------------------------------------------
  300. CXTPPropertyGridInplaceSpinButton(CXTPPropertyGridItem* pItem);
  301. public:
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     This method is called when item creates its in-place control.
  305. // Parameters:
  306. //     rcValue - Boundary rectangle of control.
  307. // See Also: OnDestroyWindow
  308. //-----------------------------------------------------------------------
  309. virtual void OnCreateWindow(CRect& rcValue);
  310. //-----------------------------------------------------------------------
  311. // Summary:
  312. //     This method is called when item require to calculate its value rectangle
  313. // Parameters:
  314. //     rcValue - Bounding rectangle of value.
  315. // See Also: OnCreateWindow
  316. //-----------------------------------------------------------------------
  317. virtual void OnAdjustValueRect(CRect& rcValue);
  318. //-----------------------------------------------------------------------
  319. // Summary:
  320. //     This method is called when value of parent item was changed.
  321. //-----------------------------------------------------------------------
  322. virtual void OnValueChanged();
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //     Retrieves CSpinButtonCtrl control
  326. //-----------------------------------------------------------------------
  327. CSpinButtonCtrl* GetSpinButtonCtrl() const;
  328. //-----------------------------------------------------------------------
  329. // Summary:
  330. //     Call this method to set lower range of spin control
  331. // Parameters:
  332. //     nMin - lower range
  333. // See Also: SetMax
  334. //-----------------------------------------------------------------------
  335. void SetMin(int nMin);
  336. //-----------------------------------------------------------------------
  337. // Summary:
  338. //     Call this method to set upper range of spin control
  339. // Parameters:
  340. //     nMax - upper range
  341. // See Also: SetMin
  342. //-----------------------------------------------------------------------
  343. void SetMax(int nMax);
  344. //-----------------------------------------------------------------------
  345. // Summary:
  346. //     Retrieves lower range of spin control
  347. //-----------------------------------------------------------------------
  348. int GetMin() const;
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     Retrieves upper range of spin control
  352. //-----------------------------------------------------------------------
  353. int GetMax() const;
  354. protected:
  355. //{{AFX_CODEJOCK_PRIVATE
  356. DECLARE_MESSAGE_MAP()
  357. //{{AFX_MSG(CXTPPropertyGridInplaceSpinButton)
  358. afx_msg void OnDeltapos(NMHDR *pNMHDR, LRESULT *pResult);
  359. //}}AFX_MSG
  360. //}}AFX_CODEJOCK_PRIVATE
  361. protected:
  362. int m_nMin;         // Lower range
  363. int m_nMax;         // Upper range
  364. };
  365. AFX_INLINE CSpinButtonCtrl* CXTPPropertyGridInplaceSpinButton::GetSpinButtonCtrl() const {
  366. return (CSpinButtonCtrl*)this;
  367. }
  368. AFX_INLINE void CXTPPropertyGridInplaceSpinButton::SetMin(int nMin) {
  369. m_nMin = nMin;
  370. }
  371. AFX_INLINE void CXTPPropertyGridInplaceSpinButton::SetMax(int nMax) {
  372. m_nMax = nMax;
  373. }
  374. AFX_INLINE int CXTPPropertyGridInplaceSpinButton::GetMin() const {
  375. return m_nMin;
  376. }
  377. AFX_INLINE int CXTPPropertyGridInplaceSpinButton::GetMax() const {
  378. return m_nMax;
  379. }
  380. //===========================================================================
  381. // Summary:
  382. //     CXTPPropertyGridInplaceControls is standalone class it represents
  383. //     collection of CXTPPropertyGridInplaceControl classes.
  384. //===========================================================================
  385. class _XTP_EXT_CLASS CXTPPropertyGridInplaceControls
  386. {
  387. public:
  388. //-----------------------------------------------------------------------
  389. // Summary:
  390. //     Constructs a CXTPPropertyGridInplaceControls object
  391. //-----------------------------------------------------------------------
  392. CXTPPropertyGridInplaceControls();
  393. //-------------------------------------------------------------------------
  394. // Summary:
  395. //     Destroys a CXTPPropertyGridInplaceControls object, handles
  396. //     cleanup and deallocation
  397. //-------------------------------------------------------------------------
  398. ~CXTPPropertyGridInplaceControls();
  399. public:
  400. //-------------------------------------------------------------------------
  401. // Summary:
  402. //     Call this method to remove all in-place controls from collection
  403. // See Also: Add
  404. //-------------------------------------------------------------------------
  405. void RemoveAll();
  406. //-----------------------------------------------------------------------
  407. // Summary:
  408. //     Call this method to retrieve total number of controls in collection
  409. // See Also: GetAt
  410. //-----------------------------------------------------------------------
  411. int GetCount() const;
  412. //-----------------------------------------------------------------------
  413. // Summary:
  414. //     Adds new control to collection
  415. // Parameters:
  416. //     pWindow - Pointer to new in-place control
  417. // See Also: GetAt
  418. //-----------------------------------------------------------------------
  419. void Add(CXTPPropertyGridInplaceControl* pWindow);
  420. //-----------------------------------------------------------------------
  421. // Summary:
  422. //     Call this method to retrieve control by its index
  423. // Parameters:
  424. //     nIndex - Index of control to retrieve
  425. // See Also: GetCount, Add
  426. //-----------------------------------------------------------------------
  427. CXTPPropertyGridInplaceControl* GetAt(int nIndex);
  428. protected:
  429. CArray<CXTPPropertyGridInplaceControl*, CXTPPropertyGridInplaceControl*> m_arrControls;         // Arraay of controls
  430. };
  431. AFX_INLINE CXTPPropertyGridItem* CXTPPropertyGridInplaceEdit::GetItem() {
  432. return m_pItem;
  433. }
  434. AFX_INLINE BOOL CXTPPropertyGridInplaceEdit::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  435. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  436. }
  437. AFX_INLINE BOOL CXTPPropertyGridInplaceEdit::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  438. return CEdit::Create(dwStyle, rect, pParentWnd, nID);
  439. }
  440. #endif // #if !defined(__XTPPROPERTYGRIDINPLACEEDIT_H__)