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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportInplaceControls.h
  2. //
  3. // This file is a part of the XTREME REPORTCONTROL 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(__XTPREPORTINPLACECONTROLS_H__)
  22. #define __XTPREPORTINPLACECONTROLS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPReportRecord;
  28. class CXTPReportControl;
  29. class CXTPReportRecordItem;
  30. class CXTPReportRecordItemConstraints;
  31. class CXTPReportRecordItemConstraint;
  32. #include "XTPReportRecordItem.h"
  33. //===========================================================================
  34. // Summary:
  35. //     CXTPReportInplaceControl is the base class for all in-place controls of
  36. //     report control item.
  37. // Remarks:
  38. //     There are 3 built-in in-place controls for Report control item:
  39. //     * CXTPReportInplaceEdit - represents edit control to allow users change cell
  40. //       of report control
  41. //     * CXTPReportInplaceButton - represents single button of item.
  42. //     * CXTPReportInplaceList - represents in-place list box to allow user select
  43. //       constraints of report item
  44. // See Also: CXTPReportInplaceEdit, CXTPReportInplaceButton, CXTPReportInplaceList
  45. //===========================================================================
  46. class _XTP_EXT_CLASS CXTPReportInplaceControl : public XTP_REPORTRECORDITEM_ARGS
  47. {
  48. public:
  49. //-----------------------------------------------------------------------
  50. // Summary:
  51. //     Constructs a CXTPPropertyGridInplaceList object
  52. //-----------------------------------------------------------------------
  53. CXTPReportInplaceControl();
  54. //-----------------------------------------------------------------------
  55. // Summary:
  56. //     Destroys a CXTPPropertyGridInplaceList object, handles cleanup
  57. //     and deallocation.
  58. //-----------------------------------------------------------------------
  59. virtual ~CXTPReportInplaceControl();
  60. protected:
  61. //-------------------------------------------------------------------------
  62. // Summary:
  63. //     This method is called internal to fill item arguments of in-place control
  64. // Parameters:
  65. //     pItemArgs - Arguments of item.
  66. //-------------------------------------------------------------------------
  67. virtual void SetItemArgs(XTP_REPORTRECORDITEM_ARGS* pItemArgs);
  68. };
  69. //===========================================================================
  70. // Summary:
  71. //     CXTPReportInplaceEdit is the CXTPReportInplaceControl derived  class,
  72. //     it represents edit control to allow users change cell of report control.
  73. //===========================================================================
  74. class _XTP_EXT_CLASS CXTPReportInplaceEdit : public CEdit, public CXTPReportInplaceControl
  75. {
  76. DECLARE_DYNAMIC(CXTPReportInplaceEdit)
  77. public:
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //     Constructs a CXTPReportInplaceEdit object
  81. //-----------------------------------------------------------------------
  82. CXTPReportInplaceEdit();
  83. //-----------------------------------------------------------------------
  84. // Summary:
  85. //     Destroys a CXTPReportInplaceEdit object, handles cleanup
  86. //     and deallocation.
  87. //-----------------------------------------------------------------------
  88. ~CXTPReportInplaceEdit();
  89. public:
  90. //-------------------------------------------------------------------------
  91. // Summary:
  92. //     This method is called to hide in-place edit control
  93. //-------------------------------------------------------------------------
  94. void HideWindow();
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //     This member function retrieves a child report control item
  98. // Returns:
  99. //     A pointer to a CXTPReportRecordItem
  100. //-----------------------------------------------------------------------
  101. CXTPReportRecordItem* GetItem() const;
  102. //-----------------------------------------------------------------------
  103. // Summary:
  104. //     Call this method to create in-place edit control.
  105. // Parameters:
  106. //     pItemArgs - Parameters of item cell.
  107. //-----------------------------------------------------------------------
  108. void Create(XTP_REPORTRECORDITEM_ARGS* pItemArgs);
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     Call this method to set edit text.
  112. // Parameters:
  113. //     lpszString - String to set.
  114. //-----------------------------------------------------------------------
  115. void SetWindowText(LPCTSTR lpszString);
  116. protected:
  117. //-----------------------------------------------------------------------
  118. // Summary:
  119. //     This method is called to change font of in-place edit control
  120. // Parameters:
  121. //     pFont - New font to be set.
  122. //-----------------------------------------------------------------------
  123. void SetFont(CFont* pFont);
  124. protected:
  125. //{{AFX_CODEJOCK_PRIVATE
  126. DECLARE_MESSAGE_MAP()
  127. //{{AFX_VIRTUAL(CXTPPropertyGridInplaceEdit)
  128. virtual BOOL PreTranslateMessage(MSG* pMsg);
  129. //}}AFX_VIRTUAL
  130. //{{AFX_MSG(CXTPPropertyGridInplaceEdit)
  131. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  132. afx_msg void OnEnKillfocus();
  133. afx_msg void OnEnChange();
  134. afx_msg UINT OnGetDlgCode();
  135. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  136. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  137. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  138. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  139. afx_msg HBRUSH CtlColor(CDC* pDC, UINT /*nCtlColor*/);
  140. //}}AFX_MSG
  141. //}}AFX_CODEJOCK_PRIVATE
  142. private:
  143. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  144. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  145. protected:
  146. CString m_strValue;                                     // The value of item before user change it.
  147. CString m_strText_prev;                                 // The text value from previous change.
  148. CFont m_fntEdit;                                        // Font of in-place edit.
  149. CXTPReportRecordItemConstraint* m_pSelectedConstraint;  // Selected constraint.
  150. COLORREF m_clrText;                                     // Text color of in-place edit.
  151. BOOL m_bSetWindowText;                                  // Indicates that text is being set with SetWindowText function.
  152. //private:
  153. friend class CXTPReportRecordItem;
  154. };
  155. AFX_INLINE CXTPReportRecordItem* CXTPReportInplaceEdit::GetItem() const {
  156. return pItem;
  157. }
  158. AFX_INLINE BOOL CXTPReportInplaceEdit::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  159. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  160. }
  161. AFX_INLINE BOOL CXTPReportInplaceEdit::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  162. return CEdit::Create(dwStyle, rect, pParentWnd, nID);
  163. }
  164. const UINT XTP_ID_REPORT_EXPANDBUTTON = 100; //<ALIAS CXTPReportInplaceButton::CXTPReportInplaceButton@UINT>
  165. const UINT XTP_ID_REPORT_COMBOBUTTON = 101; //<ALIAS CXTPReportInplaceButton::CXTPReportInplaceButton@UINT>
  166. const UINT XTP_ID_REPORT_SPINBUTTON = 102; //<ALIAS CXTPReportInplaceButton::CXTPReportInplaceButton@UINT>
  167. //===========================================================================
  168. // Summary:
  169. //     CXTPReportInplaceButton is the CXTPReportInplaceControl derived  class,
  170. //     it represents combo button and expand button of report cell.
  171. //===========================================================================
  172. class _XTP_EXT_CLASS CXTPReportInplaceButton : public CStatic, public CXTPReportInplaceControl
  173. {
  174. public:
  175. //-----------------------------------------------------------------------
  176. // Summary:
  177. //     Constructs a CXTPReportInplaceButton object
  178. // Parameters:
  179. //     nID - Identifier of in-place button. Can be any of the values listed in the Remarks section.
  180. // Remarks:
  181. //     Default identifiers are:
  182. //     * <b>XTP_ID_REPORT_EXPANDBUTTON</b> Indicates the button acts like an expand button
  183. //     * <b>XTP_ID_REPORT_COMBOBUTTON</b>  Indicates the button acts like a combo button.
  184. //     * <b>XTP_ID_REPORT_SPINBUTTON</b>  Indicates the button acts like a spin button.
  185. //-----------------------------------------------------------------------
  186. CXTPReportInplaceButton(UINT nID);
  187. public:
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //     Call this method to create in-place button control.
  191. // Parameters:
  192. //     pItemArgs - Parameters of item cell.
  193. //     rcButtons - Bounding rectangle of the button
  194. //-----------------------------------------------------------------------
  195. void Create(XTP_REPORTRECORDITEM_ARGS* pItemArgs, CRect& rcButtons);
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Retrieves identifier of the button
  199. // Returns:
  200. //     Identifier of the button.
  201. //-----------------------------------------------------------------------
  202. int GetID() const;
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     Call this method to determine if user pressed the button.
  206. // Returns:
  207. //     TRUE if user pressed the button.
  208. //-----------------------------------------------------------------------
  209. BOOL IsPressed() const;
  210. //-----------------------------------------------------------------------
  211. // Summary:
  212. //     Call this method to determine the button state.
  213. // Returns:
  214. //     The button state.
  215. //-----------------------------------------------------------------------
  216. int GetState() const;
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     This member function retrieves a child report control item.
  220. // Returns:
  221. //     A pointer to a CXTPReportRecordItem
  222. //-----------------------------------------------------------------------
  223. CXTPReportRecordItem* GetItem() const;
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //     Retrieves button width.
  227. // Returns:
  228. //     A width of the button.
  229. //-----------------------------------------------------------------------
  230. int GetWidth();
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Call this method to determine if button placed inside the cell rect,
  234. //     or outside (near right cell side).
  235. // Returns:
  236. //     TRUE if button is inside cell, FALSE otherwise.
  237. //-----------------------------------------------------------------------
  238. BOOL IsInsideCellButton() const;
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Call this method to set button place inside the cell rect,
  242. //     or outside (near right cell side).
  243. // Parameters:
  244. //     bInsideCell - TRUE if button is inside cell, FALSE otherwise.
  245. //-----------------------------------------------------------------------
  246. void SetInsideCellButton(BOOL bInsideCell);
  247. //-----------------------------------------------------------------------
  248. // Summary:
  249. //     Sets the icon index for the button.
  250. // Parameters:
  251. //     nIconIndex - icon index.
  252. // See Also:
  253. //     GetIconIndex
  254. //-----------------------------------------------------------------------
  255. void SetIconIndex(int nIconIndex);
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     Retrieves the icon index for the button.
  259. // Returns:
  260. //     Icon index.
  261. // See Also:
  262. //     SetIconIndex
  263. //-----------------------------------------------------------------------
  264. int GetIconIndex();
  265. protected:
  266. //{{AFX_CODEJOCK_PRIVATE
  267. DECLARE_MESSAGE_MAP()
  268. //{{AFX_VIRTUAL(CXTPReportInplaceButton)
  269. virtual void OnFinalRelease();
  270. //{{AFX_VIRTUAL
  271. //{{AFX_MSG(CXTPReportInplaceButton)
  272. afx_msg void OnPaint();
  273. afx_msg void OnLButtonDown(UINT, CPoint point);
  274. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  275. afx_msg void OnLButtonDblClk(UINT, CPoint point);
  276. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  277. afx_msg void OnCaptureChanged(CWnd* pWnd);
  278. afx_msg void OnTimer(UINT_PTR nIDEvent);
  279. //}}AFX_MSG
  280. //}}AFX_CODEJOCK_PRIVATE
  281. private:
  282. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  283. BOOL Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff);
  284. protected:
  285. int m_nID;                              // Identifier of the button.
  286. int m_nWidth;                           // Width of the button.
  287. int m_nFixedHeight;                     // Width of the button.
  288. BOOL m_bInsideCell;                     // Store button place: inside the cell rect, or outside.
  289. int m_nIconIndex;                       // Icon index.
  290. BOOL m_bPressed;                        // TRUE if the button is pressed.
  291. BOOL m_bOver;                           // TRUE if the mouse cursor is over the button.
  292. int m_nState;                           // Button state.
  293. int m_nSpinIncrement;                   // Spin button only: increment value.
  294. UINT_PTR m_unSpinTimerCnt;              // Spin button only: timer counter.
  295. UINT_PTR m_unSpinTimerId;               // Spin button only: timer identifier.
  296. friend class CXTPReportRecordItem;
  297. };
  298. AFX_INLINE int CXTPReportInplaceButton::GetID() const {
  299. return m_nID;
  300. }
  301. AFX_INLINE BOOL CXTPReportInplaceButton::IsPressed() const {
  302. return m_bPressed && m_bOver;
  303. }
  304. AFX_INLINE int CXTPReportInplaceButton::GetState() const {
  305. return m_bOver ? m_nState : 0;
  306. }
  307. AFX_INLINE BOOL CXTPReportInplaceButton::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  308. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  309. }
  310. AFX_INLINE BOOL CXTPReportInplaceButton::Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  311. return CStatic::Create(lpszText, dwStyle, rect, pParentWnd, nID);
  312. }
  313. AFX_INLINE CXTPReportRecordItem* CXTPReportInplaceButton::GetItem() const {
  314. return pItem;
  315. }
  316. AFX_INLINE void CXTPReportInplaceButton::SetIconIndex(int nIconIndex) {
  317. m_nIconIndex  = nIconIndex;
  318. }
  319. AFX_INLINE int CXTPReportInplaceButton::GetIconIndex() {
  320. return m_nIconIndex;
  321. }
  322. //===========================================================================
  323. // Summary:
  324. //     CXTPReportInplaceList is the CXTPReportInplaceControl derived  class,
  325. //     it represents list box with constraints of item.
  326. // See Also: CXTPReportRecordItemConstraints
  327. //===========================================================================
  328. class _XTP_EXT_CLASS CXTPReportInplaceList : public CListBox, public CXTPReportInplaceControl
  329. {
  330. public:
  331. //-------------------------------------------------------------------------
  332. // Summary:
  333. //     Constructs a CXTPReportInplaceList object
  334. //-------------------------------------------------------------------------
  335. CXTPReportInplaceList();
  336. public:
  337. //-----------------------------------------------------------------------
  338. // Summary:
  339. //     Call this method to create in-place list control.
  340. // Parameters:
  341. //     pItemArgs - Parameters of item cell.
  342. //     pConstaints - constraints of item
  343. //-----------------------------------------------------------------------
  344. void Create(XTP_REPORTRECORDITEM_ARGS* pItemArgs, CXTPReportRecordItemConstraints* pConstaints);
  345. //-------------------------------------------------------------------------
  346. // Summary:
  347. //     This method is called to cancel user selection.
  348. //-------------------------------------------------------------------------
  349. void Cancel();
  350. //-------------------------------------------------------------------------
  351. // Summary:
  352. //     This method is called to save selected value of list box.
  353. //-------------------------------------------------------------------------
  354. void Apply();
  355. protected:
  356. //{{AFX_CODEJOCK_PRIVATE
  357. DECLARE_MESSAGE_MAP()
  358. //{{AFX_VIRTUAL(CXTPReportInplaceList)
  359. void PostNcDestroy();
  360. //}}AFX_VIRTUAL
  361. //{{AFX_MSG(CXTPReportInplaceList)
  362. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  363. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  364. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  365. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  366. afx_msg void OnKillFocus(CWnd* pNewWnd);
  367. afx_msg void OnLButtonUp(UINT, CPoint point);
  368. //}}AFX_MSG
  369. //}}AFX_CODEJOCK_PRIVATE
  370. //-------------------------------------------------------------------------
  371. // Summary:
  372. //     This method is called internal to fill item arguments of in-place control
  373. // Parameters:
  374. //     pItemArgs - Arguments of item.
  375. //-------------------------------------------------------------------------
  376. virtual void SetItemArgs(XTP_REPORTRECORDITEM_ARGS* pItemArgs);
  377. //-------------------------------------------------------------------------
  378. // Summary:
  379. //     This method is called internally to react on selection changing.
  380. // Parameters:
  381. //     nLBIndex - An index of the selected item in the list.
  382. //-------------------------------------------------------------------------
  383. virtual void OnSelectionChanged(int nLBIndex);
  384. private:
  385. CString m_strHotSearchContext;
  386. DWORD m_dwLastKeyDownTime;
  387. BOOL m_bApply;
  388. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  389. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  390. };
  391. //////////////////////////////////////////////////////////////////////////
  392. AFX_INLINE BOOL CXTPReportInplaceList::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  393. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  394. }
  395. AFX_INLINE BOOL CXTPReportInplaceList::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) {
  396. return CListBox::Create(dwStyle, rect, pParentWnd, nID);
  397. }
  398. AFX_INLINE int CXTPReportInplaceButton::GetWidth() {
  399. return m_nWidth;
  400. }
  401. AFX_INLINE BOOL CXTPReportInplaceButton::IsInsideCellButton() const {
  402. return m_bInsideCell;
  403. }
  404. AFX_INLINE void CXTPReportInplaceButton::SetInsideCellButton(BOOL bInsideCell) {
  405. m_bInsideCell = bInsideCell;
  406. }
  407. #endif // #if !defined(__XTPREPORTINPLACECONTROLS_H__)