ReportCtrl.h
上传用户:zhenhuadz
上传日期:2007-01-07
资源大小:1511k
文件大小:14k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////
  2. // File: CReportCtrl.h
  3. // Version: 1.0.1.0
  4. //
  5. // Author: Maarten Hoeben
  6. // E-mail: hoeben@nwn.com
  7. //
  8. // Specification of the CReportCtrl and associated classes.
  9. //
  10. // You are free to use, distribute or modify this code
  11. // as long as the header is not removed or modified.
  12. //
  13. ////////////////////////////////////////////////////////////////////////////
  14. #if !defined(AFX_REPORTCTRL_H__279B1CA0_D7F2_11D2_88D7_ABB23645F26D__INCLUDED_)
  15. #define AFX_REPORTCTRL_H__279B1CA0_D7F2_11D2_88D7_ABB23645F26D__INCLUDED_
  16. #if _MSC_VER > 1000
  17. #pragma once
  18. #endif // _MSC_VER > 1000
  19. // ReportCtrl.h : header file
  20. //
  21. #include "MemDC.h"
  22. #include "FlatHeaderCtrl.h"
  23. // Use this as the classname when inserting this control as a custom control
  24. // in the MSVC++ dialog editor
  25. #define REPORTCTRL_CLASSNAME _T("MFCReportCtrl")
  26. #define REPORTCTRL_MAX_TEXT 256
  27. #define REPORTCTRL_MAX_COLORS 32
  28. #define IDC_HEADERCTRL 0
  29. #define IDC_REPORTCTRL 0
  30. // Properties
  31. #define RVP_SPACING 1
  32. #define RVP_CHECK 2
  33. #define RVP_NOITEMTEXT 3
  34. #define RVP_GRIDSTYLE 4
  35. #define RVP_GRIDSTYLE_DOT 0
  36. #define RVP_GRIDSTYLE_DASH 1
  37. #define RVP_GRIDSTYLE_SOLID 2
  38. // Styles
  39. #define RVS_SINGLESELECT 0x0001
  40. #define RVS_SHOWSELALWAYS 0x0002
  41. #define RVS_SHOWCOLORALWAYS 0x0004
  42. #define RVS_SHOWCOLORALTERNATE 0x0008
  43. #define RVS_SHOWHGRID 0x0010
  44. #define RVS_SHOWVGRID 0x0020
  45. #define RVS_NOHEADER 0x0040
  46. #define RVS_NOSORT 0x0080
  47. #define RVS_ALLOWCOLUMNREMOVAL 0x0100
  48. // Column Format
  49. #define RVCF_LEFT HDF_LEFT
  50. #define RVCF_RIGHT HDF_RIGHT
  51. #define RVCF_CENTER HDF_CENTER
  52. #define RVCF_TEXT HDF_STRING
  53. #define RVCF_IMAGE HDF_IMAGE
  54. #define RVCF_JUSTIFYMASK HDF_JUSTIFYMASK
  55. #define RVCF_MASK 0x0000ffff
  56. #define RVCF_EX_AUTOWIDTH (HDF_EX_AUTOWIDTH<<16)
  57. #define RVCF_EX_INCLUDESORT (HDF_EX_INCLUDESORT<<16)
  58. #define RVCF_EX_FIXEDWIDTH (HDF_EX_FIXEDWIDTH<<16)
  59. #define RVCF_EX_MASK 0x00ff0000
  60. #define RVCF_SUBITEM_IMAGE 0x01000000
  61. #define RVCF_SUBITEM_CHECK 0x02000000
  62. #define RVCF_SUBITEM_MASK 0xff000000
  63. typedef struct _RVCOLUMN
  64. {
  65.     UINT nFormat;
  66.     INT iWidth;
  67. INT iMinWidth;
  68. INT iMaxWidth;
  69.     INT iImage;
  70.     LPTSTR lpszText;
  71. _RVCOLUMN() : nFormat(RVCF_LEFT|RVCF_TEXT), iWidth(-1), iMinWidth(0), iMaxWidth(-1), iImage(0), lpszText(NULL) {};
  72. } RVCOLUMN, FAR* LPRVCOLUMN;
  73. // Item Masks
  74. #define RVIM_TEXT 0x0001
  75. #define RVIM_TEXTCOLOR 0x0002
  76. #define RVIM_IMAGE 0x0004
  77. #define RVIM_CHECK 0x0008
  78. #define RVIM_BKCOLOR 0x0010
  79. #define RVIM_PREVIEW 0x0020
  80. #define RVIM_STATE 0x0040
  81. #define RVIM_LPARAM 0x0080
  82. // Item State
  83. #define RVIS_FOCUSED 0x0001
  84. #define RVIS_SELECTED 0x0002
  85. #define RVIS_BOLD 0x0004
  86. typedef struct _RVITEM
  87. {
  88. UINT nMask;
  89. INT iItem;
  90. INT iSubItem;
  91. LPTSTR lpszText;
  92. INT iTextMax;
  93. INT iTextColor;
  94. INT iImage;
  95. INT iCheck;
  96. INT iBkColor;
  97. UINT nPreview;
  98. UINT nState;
  99. LPARAM lParam;
  100. _RVITEM() : nMask(0), iItem(-1), iSubItem(-1), lpszText(NULL), iTextMax(0), iTextColor(-1), iImage(-1), iCheck(-1), iBkColor(-1), nPreview(0), nState(0), lParam(0) {};
  101. } RVITEM, FAR* LPRVITEM;
  102. // Hit Test
  103. #define RVHT_NOWHERE 0x0001
  104. #define RVHT_ONITEMIMAGE 0x0002
  105. #define RVHT_ONITEMCHECK 0x0004
  106. #define RVHT_ONITEMTEXT 0x0008
  107. #define RVHT_ONITEMPREVIEW 0x0010
  108. #define RVHT_ONITEM (RVHT_ONITEMIMAGE|RVHT_ONITEMCHECK|RVHT_ONITEMTEXT|RVHT_ONITEMPREVIEW)
  109. #define RVHT_ABOVE 0x0100
  110. #define RVHT_BELOW 0x0200
  111. #define RVHT_TORIGHT 0x0400
  112. #define RVHT_TOLEFT 0x0800
  113. typedef struct _RVHITTESTINFO
  114. {
  115. POINT point;
  116. UINT nFlags;
  117. INT iItem;
  118. INT iSubItem;
  119. } RVHITTESTINFO, FAR* LPRVHITTESTINFO;
  120. // Notifications
  121. #define RVN_ITEMDRAWPREVIEW (0U-2048U)
  122. #define RVN_ITEMCLICK (0U-2049U)
  123. #define RVN_ITEMDBCLICK (0U-2050U)
  124. #define RVN_SELECTIONCHANGING (0U-2051U)
  125. #define RVN_SELECTIONCHANGED (0U-2052U)
  126. #define RVN_COLUMNCLICK (0U-2053U)
  127. typedef struct _NMRVDRAWPREVIEW
  128. {
  129.     NMHDR hdr;
  130.     INT iItem;
  131. UINT nState;
  132. HDC hDC;
  133. RECT rect;
  134.     LPARAM lParam;
  135. } NMRVDRAWPREVIEW, FAR* LPNMRVDRAWPREVIEW;
  136. typedef struct _NMREPORTVIEW
  137. {
  138.     NMHDR hdr;
  139. UINT nKeys;
  140.     POINT point;
  141. UINT nFlags;
  142.     INT iItem;
  143.     INT iSubItem;
  144.     LPARAM lParam;
  145. } NMREPORTVIEW, FAR* LPNMREPORTVIEW;
  146. typedef INT (CALLBACK* LPFNRVCOMPARE)(INT iColumn, INT iItem1, INT iItem2);
  147. class CReportData : public CString
  148. {
  149. public:
  150. CReportData();
  151. ~CReportData();
  152. BOOL New(INT iSubItems);
  153. BOOL GetSubItem(INT iSubItem, LPINT lpiImage, LPINT lpiCheck, LPINT lpiColor, LPTSTR lpszText, INT iTextMax);
  154. BOOL SetSubItem(INT iSubItem, INT iImage, INT iCheck, INT iColor, LPCTSTR lpszText);
  155. BOOL InsertSubItem(INT iSubItem, INT iImage, INT iCheck, INT iColor, LPCTSTR lpszText);
  156. BOOL DeleteSubItem(INT iSubItem);
  157. };
  158. class CReportColumnListCtrl;
  159. /////////////////////////////////////////////////////////////////////////////
  160. // CReportCtrl window
  161. class CReportCtrl : public CWnd
  162. {
  163. friend class CReportView;
  164. friend class CReportColumnListCtrl;
  165. // Construction
  166. public:
  167. CReportCtrl();
  168. DECLARE_DYNCREATE(CReportCtrl)
  169. public:
  170. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  171. // Attributes
  172. public:
  173. BOOL ModifyProperty(WPARAM wParam, LPARAM lParam);
  174. INT ActivateColumn(INT iColumn, INT iOrder = 0);
  175. BOOL DeactivateColumn(INT iColumn);
  176. BOOL IsActiveColumn(INT iColumn);
  177. BOOL GetItem(LPRVITEM lprvi);
  178. BOOL SetItem(LPRVITEM lprvi);
  179. INT GetItemText(INT iItem, INT iSubItem, LPTSTR lpszText, INT iLen);
  180. CString GetItemText(INT iItem, INT iSubItem);
  181. BOOL SetItemText(INT iItem, INT iSubItem, LPTSTR lpszText);
  182. INT GetItemImage(INT iItem, INT iSubItem);
  183. BOOL SetItemImage(INT iItem, INT iSubItem, INT iImage);
  184. INT GetItemCheck(INT iItem, INT iSubItem);
  185. BOOL SetItemCheck(INT iItem, INT iSubItem, INT iCheck = -1);
  186. DWORD GetItemData(INT iItem);
  187. BOOL SetItemData(INT iItem, DWORD dwData);
  188. INT GetVisibleCount(BOOL bUnobstructed = TRUE);
  189. INT GetItemCount();
  190. INT GetFirstSelectedItem();
  191. INT GetNextSelectedItem(INT iItem);
  192. BOOL SetImageList(CImageList* pImageList);
  193. CImageList* GetImageList();
  194. CFlatHeaderCtrl* GetHeaderCtrl();
  195. BOOL SetReportColumnListCtrl(CReportColumnListCtrl* lprclc);
  196. CReportColumnListCtrl* GetReportColumnListCtrl();
  197. BOOL SetSortCallback(LPFNRVCOMPARE lpfnrvc);
  198. LPFNRVCOMPARE GetSortCallback();
  199. BOOL WriteProfile(LPCTSTR lpszSection, LPCTSTR lpszEntry);
  200. BOOL GetProfile(LPCTSTR lpszSection, LPCTSTR lpszEntry);
  201. // Operations
  202. public:
  203. BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
  204. INT DefineColumn(INT iColumn, LPRVCOLUMN lprvc, BOOL bUpdateList = FALSE);
  205. BOOL UndefineColumn(INT iColumn);
  206. INT InsertItem(INT iItem, LPTSTR lpszText, INT iImage = -1, INT iCheck = -1, INT iTextColor = -1);
  207. INT InsertItem(LPRVITEM lprvi);
  208. BOOL DeleteItem(INT iItem);
  209. BOOL DeleteAllItems();
  210. void RedrawItems(INT iFirst, INT iLast = -1);
  211. BOOL EnsureVisible(INT iItem, BOOL bUnobstructed = TRUE);
  212. INT InsertColor(INT iIndex, COLORREF crColor);
  213. BOOL DeleteColor(INT iIndex);
  214. INT HitTest(LPRVHITTESTINFO lprvhti);
  215. BOOL SortItems(INT iColumn, BOOL bAscending);
  216. // Overrides
  217. virtual ~CReportCtrl();
  218. virtual void DrawItem(CDC* pDC, CRect rect, LPRVITEM lprvi);
  219. virtual INT CompareItems(INT iColumn, INT iItem1, INT iItem2);
  220. // ClassWizard generated virtual function overrides
  221. //{{AFX_VIRTUAL(CReportCtrl)
  222. protected:
  223. virtual void PreSubclassWindow();
  224. //}}AFX_VIRTUAL
  225. // Structures
  226. protected:
  227. typedef struct structSUBITEM
  228. {
  229. UINT nFormat;
  230. INT iWidth;
  231. INT iMinWidth;
  232. INT iMaxWidth;
  233. INT iImage;
  234. CString strText;
  235. structSUBITEM() : nFormat(RVCF_LEFT), iWidth(-1), iMinWidth(0), iMaxWidth(-1), iImage(0) {};
  236. } SUBITEM, FAR* LPSUBITEM;
  237. typedef struct structITEM
  238. {
  239. CReportData rdData;
  240. INT iBkColor;
  241. UINT nState;
  242. UINT nPreview;
  243. LPARAM lParam;
  244. structITEM() :
  245. iBkColor(-1),
  246. nPreview(0),
  247. nState(0),
  248. lParam(0)
  249. {};
  250. structITEM& operator = (structITEM& item)
  251. {
  252. rdData = item.rdData;
  253. iBkColor = item.iBkColor;
  254. nPreview = item.nPreview;
  255. nState = item.nState;
  256. lParam = item.lParam;
  257. return *this;
  258. }
  259. } ITEM, FAR* LPITEM;
  260. // Implementation
  261. protected:
  262. BOOL m_bSubclassFromCreate;
  263. BOOL m_bDoubleBuffer;
  264. INT m_iSpacing;
  265. CFont m_font;
  266. CFont m_fontBold;
  267. CImageList* m_pImageList;
  268. SIZE m_sizeImage;
  269. SIZE m_sizeCheck;
  270. COLORREF m_crBackground;
  271. COLORREF m_crBkSelected;
  272. COLORREF m_crBkSelectedNoFocus;
  273. COLORREF m_crText;
  274. COLORREF m_crTextSelected;
  275. COLORREF m_crTextSelectedNoFocus;
  276. COLORREF m_crGrid;
  277. CArray<COLORREF, COLORREF> m_arrayColors;
  278. CPalette m_palette;
  279. INT m_iGridStyle;
  280. CString m_strNoItems;
  281. CRect m_rectHeader;
  282. CRect m_rectReport;
  283. INT m_iDefaultWidth, m_iDefaultHeight;
  284. INT m_iVirtualWidth, m_iVirtualHeight;
  285. CArray<SUBITEM, SUBITEM> m_arraySubItems;
  286. CArray<ITEM, ITEM> m_arrayItems;
  287. BOOL m_bColumnsReordered;
  288. CArray<INT, INT> m_arrayColumns;
  289. BOOL m_bFocus;
  290. INT m_iFocusRow;
  291. INT m_iSelectRow;
  292. CArray<INT, INT> m_arrayRows;
  293. LPFNRVCOMPARE m_lpfnrvc;
  294. CFlatHeaderCtrl m_wndHeader;
  295. CReportColumnListCtrl* m_lprclc;
  296. BOOL Create();
  297. void GetSysColors();
  298. BOOL CreatePalette();
  299. BOOL Notify(UINT nCode, INT iItem = -1, INT iSubItem = -1, LPARAM lParam = 0);
  300. BOOL Notify(UINT nCode, UINT nKeys, LPRVHITTESTINFO lprvhti);
  301. void Layout(INT cx, INT cy);
  302. INT FindItem(INT iItem);
  303. INT FindColumnInHeader(INT iColumn);
  304. INT GetVisibleRows(BOOL bUnobstructed = TRUE, LPINT lpiFirst = NULL, LPINT lpiLast = NULL, BOOL bReverse = FALSE);
  305. void SelectRows(INT iFirst, INT iLast, BOOL bSelect = TRUE, BOOL bKeepSelection = FALSE, BOOL bInvert = FALSE);
  306.     INT GetScrollPos32(INT iBar, BOOL bGetTrackPos = FALSE);
  307.     BOOL SetScrollPos32(INT iBar, INT nPos, BOOL bRedraw = TRUE);
  308. void ScrollWindow(INT iBar, INT iPos);
  309. void DrawCtrl(CDC* pDC);
  310. INT DrawImage(CDC* pDC, CRect rect, LPRVITEM lprvi);
  311. INT DrawCheck(CDC* pDC, CRect rect, LPRVITEM lprvi);
  312. INT DrawText(CDC* pDC, CRect rect, LPRVITEM lprvi);
  313. // Generated message map functions
  314. protected:
  315. //{{AFX_MSG(CReportCtrl)
  316. afx_msg void OnSize(UINT nType, int cx, int cy);
  317. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  318. afx_msg void OnPaint();
  319. afx_msg void OnSysColorChange();
  320. afx_msg void OnHdnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
  321. afx_msg void OnHdnItemClick(NMHDR* pNMHDR, LRESULT* pResult);
  322. afx_msg void OnHdnEndDrag(NMHDR* pNMHDR, LRESULT* pResult);
  323. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  324. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  325. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  326. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  327. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  328. afx_msg UINT OnGetDlgCode();
  329. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  330. afx_msg BOOL OnQueryNewPalette();
  331. afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
  332. afx_msg void OnSetFocus(CWnd* pOldWnd);
  333. afx_msg void OnKillFocus(CWnd* pNewWnd);
  334. //}}AFX_MSG
  335.     afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM lParam);
  336.     afx_msg LRESULT OnGetFont(WPARAM wParam, LPARAM lParam);
  337. DECLARE_MESSAGE_MAP()
  338. };
  339. /////////////////////////////////////////////////////////////////////////////
  340. // CReportView
  341. class CReportView : public CView
  342. {
  343. protected:
  344. CReportView();           // protected constructor used by dynamic creation
  345. DECLARE_DYNCREATE(CReportView)
  346. // Attributes
  347. public:
  348. CReportCtrl& GetReportCtrl();
  349. // Operations
  350. public:
  351. // Overrides
  352. // ClassWizard generated virtual function overrides
  353. //{{AFX_VIRTUAL(CReportView)
  354. public:
  355. virtual void OnInitialUpdate();
  356. protected:
  357. virtual void OnDraw(CDC* pDC);      // overridden to draw this view
  358. //}}AFX_VIRTUAL
  359. // Implementation
  360. protected:
  361. virtual ~CReportView();
  362. #ifdef _DEBUG
  363. virtual void AssertValid() const;
  364. virtual void Dump(CDumpContext& dc) const;
  365. #endif
  366. BOOL m_bCreated;
  367. CReportCtrl m_wndReportCtrl;
  368. // Generated message map functions
  369. protected:
  370. //{{AFX_MSG(CReportView)
  371. afx_msg void OnSize(UINT nType, int cx, int cy);
  372. afx_msg void OnSetFocus(CWnd* pOldWnd);
  373. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  374. //}}AFX_MSG
  375. DECLARE_MESSAGE_MAP()
  376. };
  377. /////////////////////////////////////////////////////////////////////////////
  378. // CReportColumnList window
  379. class CReportColumnListCtrl : public CDragListBox
  380. {
  381. // Construction
  382. public:
  383. CReportColumnListCtrl();
  384. ~CReportColumnListCtrl();
  385. // Attributes
  386. public:
  387. BOOL SetReportCtrl(CReportCtrl* pReportCtrl);
  388. CReportCtrl* GetReportCtrl();
  389. // Operations
  390. public:
  391. BOOL UpdateList();
  392. // Overrides
  393. virtual BOOL Include(INT iColumn);
  394. // ClassWizard generated virtual function overrides
  395. //{{AFX_VIRTUAL(CReportColumnListCtrl)
  396. public:
  397. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  398. protected:
  399. virtual void PreSubclassWindow();
  400. //}}AFX_VIRTUAL
  401. // Implementation
  402. protected:
  403. CReportCtrl* m_pReportCtrl;
  404. INT m_iColumn;
  405. HDITEM m_hdiColumn;
  406. TCHAR m_szColumnText[FLATHEADER_TEXT_MAX];
  407. CFHDragWnd* m_pDragWnd;
  408. CRect m_rcDragWnd;
  409. CRect m_rcDropTarget1;
  410. CRect m_rcDropTarget2;
  411. INT m_iDropIndex;
  412. BOOL BeginDrag(CPoint pt);
  413. UINT Dragging(CPoint pt);
  414. void CancelDrag(CPoint pt);
  415. void Dropped(INT iSrcIndex, CPoint pt);
  416. // Generated message map functions
  417. protected:
  418. //{{AFX_MSG(CReportColumnListCtrl)
  419. //}}AFX_MSG
  420. DECLARE_MESSAGE_MAP()
  421. };
  422. /////////////////////////////////////////////////////////////////////////////
  423. //{{AFX_INSERT_LOCATION}}
  424. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  425. #endif // !defined(AFX_REPORTCTRL_H__279B1CA0_D7F2_11D2_88D7_ABB23645F26D__INCLUDED_)