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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportView.h: interface for the CXTPReportView class.
  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(__XTPREPORTVIEW_H__)
  22. #define __XTPREPORTVIEW_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "common/XTPDrawHelpers.h"
  28. #include "XTPReportControl.h"
  29. #include "resource.h"
  30. //===========================================================================
  31. // Summary:
  32. //     Identifier of report control child window of CXTPReportView.
  33. // Example:
  34. // <code>
  35. // int CXTPReportView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  36. // {
  37. //     if (CView::OnCreate(lpCreateStruct) == -1)
  38. //         return -1;
  39. //
  40. //     if (!m_wndReport.Create(WS_CHILD | WS_TABSTOP | WS_VISIBLE | WM_VSCROLL,
  41. //         CRect(0, 0, 0, 0), this, XTP_ID_REPORT_CONTROL))
  42. //     {
  43. //         TRACE(_T("Failed to create tab control windown"));
  44. //         return -1;
  45. //     }
  46. //     return 0;
  47. // }
  48. // </code>
  49. // See Also:
  50. //     XTP_NM_REPORT_CHECKED, XTP_NM_REPORT_COLUMNORDERCHANGED, XTP_NM_REPORT_HEADER_RCLICK,
  51. //     XTP_NM_REPORT_HYPERLINK, XTP_NM_REPORT_INPLACEBUTTONDOWN, XTP_NM_REPORT_SELCHANGED
  52. //     XTP_NM_REPORT_SORTORDERCHANGED, XTP_NM_REPORT_VALUECHANGED
  53. //     CXTPReportView, CXTPReportControl, CXTPReportHeader
  54. //===========================================================================
  55. const UINT XTP_ID_REPORT_CONTROL = 100;
  56. //-------------------------------------------------------------------------
  57. // Summary:
  58. //      This class used to store printing options.
  59. // See Also: CXTPPrintOptions, CXTPPrintPageHeaderFooter
  60. //-------------------------------------------------------------------------
  61. class _XTP_EXT_CLASS CXTPReportViewPrintOptions : public CXTPPrintOptions
  62. {
  63. //{{AFX_CODEJOCK_PRIVATE
  64. DECLARE_DYNAMIC(CXTPReportViewPrintOptions)
  65. //}}AFX_CODEJOCK_PRIVATE
  66. public:
  67. //-------------------------------------------------------------------------
  68. // Summary: Default Object constructor.
  69. //-------------------------------------------------------------------------
  70. CXTPReportViewPrintOptions();
  71. //-----------------------------------------------------------------------
  72. // Summary:
  73. //      Override this member function in derived class to specify active
  74. //      locale ID.
  75. // Returns:
  76. //      Locale ID. Base implementation returns LOCALE_USER_DEFAULT;
  77. //-----------------------------------------------------------------------
  78. virtual LCID GetActiveLCID();
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //      Call this member function to copy members from specified source object.
  82. // Parameters:
  83. //      pSrc - A pointer to source object to copy data.
  84. //-----------------------------------------------------------------------
  85. virtual void Set(const CXTPReportViewPrintOptions* pSrc);
  86. BOOL    m_bRepeatHeaderRows;    // If TRUE - the header rows will be printed on every page. FALSE by default.
  87. BOOL    m_bRepeatFooterRows;    // If TRUE - the footer rows will be printed on every page. FALSE by default.
  88. protected:
  89. //{{AFX_CODEJOCK_PRIVATE
  90. //}}AFX_CODEJOCK_PRIVATE
  91. };
  92. //===========================================================================
  93. // Summary:
  94. //     Customized Calendar control page setup dialog.
  95. // Remarks:
  96. //     Use this class when you want to allow user to customize printing
  97. //     options for the Calendar control.
  98. //
  99. //     This class enhances standard MFC page setup dialog, which encapsulates
  100. //     the services provided by the Windows common OLE Page Setup dialog box
  101. //     with additional support for setting and modifying print margins.
  102. //     This class is designed to take the place of the Print Setup dialog box.
  103. //
  104. // See Also:
  105. //     CXTPReportViewPrintOptions overview,
  106. //     CPageSetupDialog overview
  107. //===========================================================================
  108. class _XTP_EXT_CLASS CXTPReportPageSetupDialog : public CPageSetupDialog
  109. {
  110. public:
  111. //{{AFX_CODEJOCK_PRIVATE
  112. enum {IDD = XTP_IDD_REPORT_PRINT_PAGE_SETUP};
  113. //}}AFX_CODEJOCK_PRIVATE
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     Class constructor.
  117. // Parameters:
  118. //     pOptions - A pointer to an associated CXTPReportViewPrintOptions
  119. //                object for storing user's interaction results.
  120. //     dwFlags  - One or more flags you can use to customize the settings
  121. //                of the dialog box. The values can be combined using the
  122. //                bitwise-OR operator. For more details see CPageSetupDialog::CPageSetupDialog
  123. //     pParentWnd - Pointer to the dialog box's parent or owner.
  124. // Remarks:
  125. //     Use the DoModal function to display the dialog box.
  126. // See also:
  127. //      CPageSetupDialog::CPageSetupDialog()
  128. //-----------------------------------------------------------------------
  129. CXTPReportPageSetupDialog(CXTPReportViewPrintOptions* pOptions,
  130. DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE,
  131. CWnd* pParentWnd = NULL);
  132. //-----------------------------------------------------------------------
  133. // Summary:
  134. //     Default class constructor, handles members cleanup.
  135. //-----------------------------------------------------------------------
  136. virtual ~CXTPReportPageSetupDialog();
  137. protected:
  138. CXTPReportViewPrintOptions* m_pOptions; // Pointer to associated print options object.
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Converts font name to a human readable string.
  142. // Parameters:
  143. //     lfFont - A reference to a font.
  144. // Returns:
  145. //     A string describing a provided font.
  146. //-----------------------------------------------------------------------
  147. //CString FormatFontName(const LOGFONT& lfFont);
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //     Dialog-box initialization.
  151. // Returns:
  152. //     FALSE because it has explicitly set the input focus to one of the
  153. //     controls in the dialog box.
  154. // See also:
  155. //     CPageSetupDialog::OnInitDialog().
  156. //-----------------------------------------------------------------------
  157. virtual BOOL OnInitDialog();
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Called when the user clicks the OK button (the button with an ID of IDOK).
  161. // Remarks:
  162. //     Saves all values into m_pOptions structure.
  163. // See also:
  164. //     CPageSetupDialog::OnOK().
  165. //-----------------------------------------------------------------------
  166. virtual void OnOK();
  167. //{{AFX_CODEJOCK_PRIVATE
  168. CEdit       m_ctrlHeaderFormat;
  169. CEdit       m_ctrlFooterFormat;
  170. CButton     m_ctrlHeaderFormatBtn;
  171. CButton     m_ctrlFooterFormatBtn;
  172. afx_msg void OnBnClickedHeaderFormat();
  173. afx_msg void OnBnClickedFooterFormat();
  174. DECLARE_MESSAGE_MAP()
  175. //}}AFX_CODEJOCK_PRIVATE
  176. };
  177. //===========================================================================
  178. // Summary:
  179. //     The CXTPReportView class provides an implementation of
  180. //     the Report control as view class. Use GetReportCtrl method to access methods
  181. //     of CXTPReportControl
  182. // See Also: CXTPReportControl
  183. //===========================================================================
  184. class _XTP_EXT_CLASS CXTPReportView : public CView
  185. {
  186. DECLARE_DYNCREATE(CXTPReportView)
  187. protected:
  188. //-------------------------------------------------------------------------
  189. // Summary:
  190. //     Protected constructor used by dynamic creation
  191. //-------------------------------------------------------------------------
  192. CXTPReportView();
  193. public:
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     Call this method to access Report control object.
  197. // Returns:
  198. //     Reference to child CXTPReportControl window
  199. //-----------------------------------------------------------------------
  200. virtual CXTPReportControl& GetReportCtrl() const;
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Call this method to set custom Report control object.
  204. // Parameters:
  205. //     pReport - Pointer to custom report object
  206. //-----------------------------------------------------------------------
  207. void SetReportCtrl(CXTPReportControl* pReport);
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Retrieved paint manager of the child report control.
  211. // Returns:
  212. //     Pointer to paint manager of report control.
  213. //-----------------------------------------------------------------------
  214. CXTPReportPaintManager* GetPaintManager() const;
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     Call this method to access print options for this view.
  218. // Returns:
  219. //     Pointer to an object describing print options of this view.
  220. //-----------------------------------------------------------------------
  221. CXTPReportViewPrintOptions* GetPrintOptions();
  222. protected:
  223. //-------------------------------------------------------------------------
  224. // Summary:
  225. //     Destroys a CXTPReportView object, handles cleanup and deallocation.
  226. //-------------------------------------------------------------------------
  227. virtual ~CXTPReportView();
  228. protected:
  229. //-----------------------------------------------------------------------
  230. // Summary:
  231. //     This method is called to print single page of report control.
  232. // Parameters:
  233. //     pDC         - Pointer to a device context for page output.
  234. //     pInfo       - Points to a CPrintInfo structure that describes the
  235. //                   current print job.
  236. //     rcPage      - Page bounding rectangle
  237. //     nIndexStart - First row to print
  238. // Remarks:
  239. //     This method prints page header, page footer and call PrintReport method.
  240. // Returns:
  241. //     Index of last printed row
  242. //-----------------------------------------------------------------------
  243. virtual long PrintPage (CDC* pDC, CPrintInfo* pInfo, CRect rcPage, long nIndexStart);
  244. //-----------------------------------------------------------------------
  245. // Summary:
  246. //     This method is called to print report control (columns header and rows)
  247. //     on the page.
  248. // Parameters:
  249. //     pDC         - Pointer to a device context for page output.
  250. //     pInfo       - Points to a CPrintInfo structure that describes the current print job.
  251. //     rcPage      - Report bounding rectangle on the page
  252. //     nIndexStart - First row to print
  253. // Remarks:
  254. //     This method call PrintHeader, PrintRows methods.
  255. // Returns:
  256. //     Index of last printed row
  257. //-----------------------------------------------------------------------
  258. virtual long PrintReport (CDC* pDC, CPrintInfo* pInfo, CRect rcPage, long nIndexStart);
  259. //-----------------------------------------------------------------------
  260. // Summary:
  261. //     This method is called to print header of each page.
  262. // Parameters:
  263. //     pDC      - Pointer to a device context for page output.
  264. //     rcHeader - Header bounding rectangle
  265. //-----------------------------------------------------------------------
  266. virtual void PrintHeader(CDC* pDC, CRect rcHeader);
  267. //-----------------------------------------------------------------------
  268. // Summary:
  269. //     This method is called to print footer of each page.
  270. // Parameters:
  271. //     pDC      - Pointer to a device context for page output.
  272. //     rcFooter - Header bounding rectangle
  273. //-----------------------------------------------------------------------
  274. virtual void PrintFooter(CDC* pDC, CRect rcFooter);
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     This method is called to draw all rows inside bounding rectangle.
  278. // Parameters:
  279. //     pDC         - Pointer to a device context for page output.
  280. //     rcRows      - Bounding rectangle of rows
  281. //     nIndexStart - First row to print
  282. //     pnPrintedRowsHeight - Height of the printed rows.
  283. // Returns:
  284. //     Index of last printed row
  285. //-----------------------------------------------------------------------
  286. virtual int PrintRows(CDC* pDC, CRect rcRows, long nIndexStart, int* pPrintedRowsHeight = NULL);
  287. //-----------------------------------------------------------------------
  288. // Summary:
  289. //     This method is called by PrintRows to print single row.
  290. // Parameters:
  291. //     pDC   - Pointer to a device context for page output.
  292. //     pRow  - Row to print.
  293. //     rcRow - Bounding rectangle of row
  294. //     nPreviewHeight - Height of preview
  295. //-----------------------------------------------------------------------
  296. virtual void PrintRow(CDC* pDC, CXTPReportRow* pRow, CRect rcRow, int nPreviewHeight);
  297. //-----------------------------------------------------------------------
  298. // Summary:
  299. //     This method calculates width of column need to print.
  300. // Parameters:
  301. //     pColumn     - Column need to print
  302. //     nTotalWidth - Total width of all columns.
  303. // Returns:
  304. //     Width of column.
  305. //-----------------------------------------------------------------------
  306. int GetColumnWidth(CXTPReportColumn* pColumn, int nTotalWidth);
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //      Use this member function to set external scroll bar control.
  310. // Parameters:
  311. //      pScrollBar - Pointer to a scrollbar object.
  312. // See Also: CScrollBar
  313. //-----------------------------------------------------------------------
  314. void SetScrollBarCtrl(CScrollBar* pScrollBar);
  315. //-----------------------------------------------------------------------
  316. // Summary:
  317. //     This method prints either header or footer rows.
  318. // Parameters:
  319. //     pDC      - Pointer to a device context for page output.
  320. //     rcClient - Bounding rectangle of fixed rows
  321. //     bHeaderRows - If TRUE, prints the header rows.
  322. // Returns:
  323. //     Height of printed rows.
  324. //-----------------------------------------------------------------------
  325. int  PrintFixedRows(CDC* pDC, CRect rcClient, BOOL bHeaderRows);
  326. //-----------------------------------------------------------------------
  327. // Summary:
  328. //     This method prints either header or footer divider.
  329. // Parameters:
  330. //     pDC  - Pointer to a device context for page output.
  331. //     rc   - Bounding rectangle of the divider.
  332. //     bHeaderRows - If TRUE, prints the header divider.
  333. // Returns:
  334. //     Height of printed rows.
  335. //-----------------------------------------------------------------------
  336. int PrintFixedRowsDivider(CDC* pDC, const CRect& rc, BOOL bHeaderRows);
  337. protected:
  338. //{{AFX_CODEJOCK_PRIVATE
  339. #ifdef _DEBUG
  340. virtual void AssertValid() const;
  341. virtual void Dump(CDumpContext& dc) const;
  342. #endif
  343. protected:
  344. DECLARE_MESSAGE_MAP()
  345. //{{AFX_VIRTUAL(CXTPReportView)
  346. virtual BOOL PaginateTo(CDC* pDC, CPrintInfo* pInfo);
  347. virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo);
  348. virtual void OnDraw(CDC* pDC);
  349. virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
  350. virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
  351. virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
  352. virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
  353. virtual void _OnPrint2(CDC* pDC, CPrintInfo* pInfo, CRect rcPrint);
  354. CScrollBar* GetScrollBarCtrl(int nBar) const;
  355. //}}AFX_VIRTUAL
  356. //{{AFX_MSG(CXTPReportView)
  357. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  358. afx_msg void OnSize(UINT nType, int cx, int cy);
  359. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  360. afx_msg void OnSetFocus(CWnd* pOldWnd);
  361. afx_msg void OnPaint();
  362. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  363. //}}AFX_MSG
  364. //{{AFX_MSG(CXTPReportView)
  365. afx_msg void OnEditCut();
  366. afx_msg void OnEditCopy();
  367. afx_msg void OnEditPaste();
  368. afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
  369. afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
  370. afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
  371. afx_msg void OnFilePageSetup();
  372. //}}AFX_MSG
  373. //}}AFX_CODEJOCK_PRIVATE
  374. protected:
  375. CBitmap     m_bmpGrayDC;        // A temporary bitmap to convert colored report control image to 'gray' colors when printing in black&while mode.
  376. CUIntArray m_aPageStart;        // Printed indexes.
  377. CXTPReportControl m_wndReport;  // Child report control window.
  378. CXTPReportControl* m_pReport;   // Child report control pointer.
  379. BOOL m_bPrintSelection;         // TRUE if only printing the currently selected rows in the report, FALSE if printing the entire report,
  380. CXTPReportViewPrintOptions* m_pPrintOptions; // Printing options.
  381. CScrollBar* m_pScrollBar;           // Store pointer to external scrollbar control.
  382. friend class CReportControlCtrl;
  383. public:
  384. BOOL    m_bAllowCut;                // If TRUE the cut operation is allowed.
  385. BOOL    m_bAllowPaste;              // If TRUE the paste operation is allowed.
  386. BOOL    m_bPrintDirect;             // if TRUE - the Print Dialog is bypassed. FALSE by default.
  387. BOOL    m_bResizeControlWithView;   // if FALSE - attached Report control will not be resized with view. TRUE by default.
  388. };
  389. /////////////////////////////////////////////////////////////////////////////
  390. AFX_INLINE CXTPReportViewPrintOptions* CXTPReportView::GetPrintOptions() {
  391. return m_pPrintOptions;
  392. }
  393. #endif // !defined(__XTPREPORTVIEW_H__)