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

对话框与窗口

开发平台:

Visual C++

  1. // XTListBase.h interface for the CXTListCtrl class.
  2. //
  3. // This file is a part of the XTREME CONTROLS 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(__XTLISTBASE_H__)
  22. #define __XTLISTBASE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTListBase is a non-inherited class. It implements the extended
  30. //     list control services provided by the Xtreme Toolkit list control classes.
  31. //===========================================================================
  32. class _XTP_EXT_CLASS CXTListBase
  33. {
  34. public:
  35. // --------------------------------------------------------------------
  36. // Summary:
  37. //     ROWCOLOR structure is used by the CXTListBase class to
  38. //     store user defined background and text color settings for a
  39. //     particular row in a list control.
  40. // See Also:
  41. //     CRowColorList, SetRowColor, RemoveRowColors, Lookup
  42. // --------------------------------------------------------------------
  43. struct ROWCOLOR
  44. {
  45. int      iRow;   // List control row index.
  46. COLORREF crBack; // RGB value for text background color.
  47. COLORREF crText; // RGB value for text foreground color.
  48. };
  49. // ----------------------------------------------------------------------
  50. // Summary:
  51. //     List for maintaining ROWCOLOR structures.
  52. // Remarks:
  53. //     CList definition used by the CXTListBase class to maintain
  54. //     a list of ROWCOLOR structures representing each row that has
  55. //     a user defined color setting for the list control.
  56. // See Also:
  57. //     CXTListBase, CXTListBase::SetRowColor, RemoveRowColors, Lookup, ROWCOLOR
  58. // ----------------------------------------------------------------------
  59. typedef CList<ROWCOLOR, ROWCOLOR&> CRowColorList;
  60. public:
  61. //-----------------------------------------------------------------------
  62. // Summary:
  63. //     Constructs a CXTListBase object
  64. //-----------------------------------------------------------------------
  65. CXTListBase();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Destroys a CXTListBase object, handles cleanup and deallocation
  69. //-----------------------------------------------------------------------
  70. virtual ~CXTListBase();
  71. public:
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     Call this member function to get a pointer to the flat header control.
  75. // Returns:
  76. //     A pointer to a CXTFlatHeaderCtrl if subclassed, otherwise returns NULL.
  77. //-----------------------------------------------------------------------
  78. CXTFlatHeaderCtrl* GetFlatHeaderCtrl() const;
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     This member function will set the sort image for the specified column.
  82. // Parameters:
  83. //     nCol - Zero-based index of the column to set the sort image for.
  84. //     bAsc - TRUE if ascending, otherwise FALSE.
  85. // Returns:
  86. //     The zero-based index of the previously sorted column.
  87. //-----------------------------------------------------------------------
  88. virtual int SetSortImage(int nCol, BOOL bAsc);
  89. //-----------------------------------------------------------------------
  90. // Summary:
  91. //     This member function will return the column width stored in the
  92. //     registry.
  93. // Parameters:
  94. //     nCol - Zero-based index of the column.
  95. // Returns:
  96. //     The column width stored in the registry.
  97. //-----------------------------------------------------------------------
  98. virtual int GetStoredWidth(int nCol);
  99. //-----------------------------------------------------------------------
  100. // Summary:
  101. //     This member function will set the column width from the registry
  102. //     settings.
  103. // Parameters:
  104. //     nCol - Zero-based index of the column.
  105. //-----------------------------------------------------------------------
  106. virtual void SetStoredWidth(int nCol);
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //     This member function loads the column widths from the registry.
  110. //-----------------------------------------------------------------------
  111. virtual void LoadColumnWidths();
  112. //-----------------------------------------------------------------------
  113. // Summary:
  114. //     This member function saves the column widths to the registry.
  115. //-----------------------------------------------------------------------
  116. virtual void SaveColumnWidths();
  117. // ---------------------------------------------------------------------
  118. // Summary:
  119. //     Automatically sizes a specified column.
  120. // Parameters:
  121. //     nCol -  Zero-based index of the column.
  122. // Remarks:
  123. //     This member function will automatically size a given column. Pass
  124. //     in a -1 to auto-fit all columns.
  125. // ---------------------------------------------------------------------
  126. virtual void AutoSizeColumn(int nCol = -1);
  127. // -------------------------------------------------------------------
  128. // Summary:
  129. //     Initializes the auto save feature.
  130. // Parameters:
  131. //     lpszSection -  Registry section name. If NULL, the default is
  132. //                    "Settings".
  133. // lpszEntry -    Registry entry name. If NULL, the default is "Column
  134. //                    Info".
  135. // lpszDefault -  Registry default value. If NULL, the default ID.
  136. // Remarks:
  137. //     This member function will initialize the auto save feature. If
  138. //     called, column widths will be saved to the system registry when
  139. //     the list control window is destroyed.
  140. // -------------------------------------------------------------------
  141. virtual void AutoSaveColumns(LPCTSTR lpszSection = NULL, LPCTSTR lpszEntry = NULL, LPCTSTR lpszDefault = NULL);
  142. //-----------------------------------------------------------------------
  143. // Summary:
  144. //     Call this member function to subclass the flat header control.
  145. // Parameters:
  146. //     bBoldFont - true to use a bold font in the header control.
  147. //-----------------------------------------------------------------------
  148. virtual bool SubclassHeader(bool bBoldFont = false);
  149. //-----------------------------------------------------------------------
  150. // Summary:
  151. //     Override this member function in your derived class to perform custom
  152. //     sort routines.
  153. // Parameters:
  154. //     nCol       - Passed in from the control. Index of the column clicked.
  155. //     bAscending - Passed in from the control. true if sort order should
  156. //                  be ascending.
  157. //-----------------------------------------------------------------------
  158. virtual bool SortList(int nCol, bool bAscending);
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //     This member function is called to set extended styles for the list
  162. //     control, ie: LVS_EX_FULLROWSELECT, LVS_EX_GRIDLINES, etc. See MSDN
  163. //     documentation for a complete list of available styles.
  164. // Parameters:
  165. //     dwExStyle  - DWORD value that specifies the extended list-view control style. This
  166. //                  parameter can be a combination of Extended List-View Styles.
  167. //-----------------------------------------------------------------------
  168. virtual void SetExtendedStyle(DWORD dwExStyle);
  169. //-----------------------------------------------------------------------
  170. // Summary:
  171. //     This member function is called to return the list control extended
  172. //     style.
  173. // Returns:
  174. //     A DWORD value that represents the extended style of the list control.
  175. //-----------------------------------------------------------------------
  176. virtual DWORD GetExtendedStyle();
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     Call this member function to enable or disable column sizing.
  180. // Parameters:
  181. //     bDisable - true to disable column sizing. false to enable.
  182. //-----------------------------------------------------------------------
  183. virtual void DisableColumnSizing(bool bDisable);
  184. //-----------------------------------------------------------------------
  185. // Summary:
  186. //     Call this member function to set a minimum column size.
  187. // Parameters:
  188. //     nSize - Size in pixels of the column's minimum size.
  189. //-----------------------------------------------------------------------
  190. void SetMinimumColSize(int nSize);
  191. //-----------------------------------------------------------------------
  192. // Summary:
  193. //     Call this member function to get the minimum column size for the list
  194. //     control.
  195. // Returns:
  196. //     An integer value that represents the minimum column size for the list control.
  197. //-----------------------------------------------------------------------
  198. int GetMinimumColSize();
  199. //-----------------------------------------------------------------------
  200. // Summary:
  201. //     Call this member function to get the maximum column size for the list control.
  202. // Returns:
  203. //     An integer value that represents the maximum column size for the list control.
  204. //-----------------------------------------------------------------------
  205. int GetMaximumColSize();
  206. //-----------------------------------------------------------------------
  207. // Summary:
  208. //     Call this member function to determine the row index and column
  209. //     index for a 'point'.
  210. // Parameters:
  211. //     point - Point to be tested.
  212. //     col   - Address of the column index
  213. // Returns:
  214. //     The row index, or -1 if 'point' is not over a row.
  215. //-----------------------------------------------------------------------
  216. virtual int HitTestEx(CPoint &point, int* col) const;
  217. // --------------------------------------------------------------------------
  218. // Summary:
  219. //     Call this member function to add a column after the right most
  220. //     column.
  221. // Parameters:
  222. //     lpszColHeading -  The column's heading.
  223. // nWidth -          Width of the column in pixels. If this parameter is -1,
  224. //                       the column width is the same as the previous column.
  225. // nFormat -         The alignment of the column. It can be LVCFMT_LEFT,
  226. //                       LVCFMT_RIGHT, or LVCFMT_CENTER.
  227. // Returns:
  228. //     The index of the new column if successful, or -1 if unsuccessful.
  229. // --------------------------------------------------------------------------
  230. virtual int AddColumn(LPCTSTR lpszColHeading, int nWidth = -1, int nFormat = LVCFMT_LEFT);
  231. // ---------------------------------------------------------------------------
  232. // Summary:
  233. //     This member function will build the columns for the list control.
  234. // Parameters:
  235. //     nCols -         [in] Number of columns contained in the list control.
  236. //     nWidth -        [in] 'int' array containing the column widths.
  237. //     strColString -  [in] CString array containing the string for each
  238. //                     column.
  239. //     nColString -    [in] 'int' array containing the string resource ID for each
  240. //                     column.
  241. // Remarks:
  242. //     Call this member function to automatically generate the columns
  243. //     for the list control. This is done by passing in an array of
  244. //     column indexes specified by <i>nCols</i>, an array of column
  245. //     widths specified by <i>nWidth</i> and and array of column labels
  246. //     specified by <i>nColString</i> or <i>strColString</i>.
  247. // Example:
  248. //     The following example demonstrates the use of BuildColumns.
  249. // <code>
  250. // static int arColWidths[] = {
  251. //     24,
  252. //     21,
  253. //     100,
  254. //     180,
  255. //     120
  256. // };
  257. //
  258. // static CString arColLabels[] = {
  259. //     _T(" "),
  260. //     _T(" "),
  261. //     _T("From"),
  262. //     _T("Subject"),
  263. //     _T("Received")
  264. // };
  265. //
  266. // // Insert the columns.
  267. // BuildColumns(_countof(arColWidths), arColWidths, arColLabels);
  268. // </code>
  269. // Returns:
  270. //     true if successful, or false if an error occurred.
  271. // ---------------------------------------------------------------------------
  272. virtual bool BuildColumns(int nCols, int* nWidth, int* nColString);
  273. virtual bool BuildColumns(int nCols, int* nWidth, CString* strColString); //<combine CXTListBase::BuildColumns@int@int*@int*>
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     This member function gets the number of columns in the list.
  277. // Returns:
  278. //     An integer value that represents the number of columns in the list.
  279. //-----------------------------------------------------------------------
  280. virtual int GetColumnCount();
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     This member function copies a row to a new location.
  284. // Parameters:
  285. //     nFrom - Index of the source row.
  286. //     nTo   - Index of the destination row.
  287. // Returns:
  288. //     The index of the source row specified by 'nFrom'.
  289. //-----------------------------------------------------------------------
  290. virtual int CopyRow(int nFrom, int nTo);
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     This member function moves a row to a new location.
  294. // Parameters:
  295. //     nFrom - Index of the source row
  296. //     nTo   - Index of the destination row
  297. // Returns:
  298. //     true if successful, or false if an error occurred.
  299. //-----------------------------------------------------------------------
  300. virtual bool MoveRow(int nFrom, int nTo);
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //     This member function is a utility function to retrieve the associated
  304. //     header control.
  305. // Returns:
  306. //     A CHeaderCtrl pointer to the associated header control.
  307. //-----------------------------------------------------------------------
  308. CHeaderCtrl *_xtGetHeaderCtrl() const;
  309. //-----------------------------------------------------------------------
  310. // Summary:
  311. //     This member function sets the row, text, and background colors for
  312. //     the list control.
  313. // Parameters:
  314. //     iRow   - Index of the row to set color for.
  315. //     clrText   - RGB value representing the row text color.
  316. //     clrTextBk - RGB value representing the row background color.
  317. //     bRedraw   - TRUE to invalidate control.
  318. // Remarks:
  319. //     The iIndex version sets the text, and background colors for
  320. //     the specified row in the list control.
  321. //-----------------------------------------------------------------------
  322. void SetRowColors(COLORREF clrText, COLORREF clrTextBk);
  323. void SetRowColor(int iRow, COLORREF crText, COLORREF crBack, BOOL bRedraw = TRUE); // <combine CXTListBase::SetRowColors@COLORREF@COLORREF>
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     This member function sets the text, and background colors for
  327. //     the specified row in the list control.
  328. // Parameters:
  329. //     lpRowColor - Points to a ROWCOLOR that contains the RGB row
  330. //                  color information.
  331. //     bRedraw    - TRUE to invalidate control.
  332. //-----------------------------------------------------------------------
  333. void SetRowColor(ROWCOLOR* lpRowColor, BOOL bRedraw = TRUE);
  334. //-----------------------------------------------------------------------
  335. // Summary:
  336. //     Call this member function to remove all user defined row colors
  337. //     from the list control.
  338. //-----------------------------------------------------------------------
  339. void RemoveRowColors();
  340. //-----------------------------------------------------------------------
  341. // Summary:
  342. //     Call this member function to determine if the specified row
  343. //     contains user defined color attributes.
  344. // Parameters:
  345. //     iRow - Index of the row to check.
  346. // Returns:
  347. //     A pointer to a ROWCOLOR structure if successful, otherwise
  348. //     NULL.
  349. //-----------------------------------------------------------------------
  350. virtual ROWCOLOR* Lookup(int iRow);
  351. //-----------------------------------------------------------------------
  352. // Summary:
  353. //     Call this member function to modify the extended style for the
  354. //     list control.
  355. // Parameters:
  356. //     dwRemove - Specifies window styles to be removed during style
  357. //                modification.
  358. //     dwAdd    - Specifies window styles to be added during style
  359. //                modification.
  360. // Returns:
  361. //     TRUE if successful, otherwise FALSE.
  362. //-----------------------------------------------------------------------
  363. virtual BOOL ModifyExtendedStyle(DWORD dwRemove, DWORD dwAdd);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Call this member function to return the RGB color value used
  367. //     for the column background color.
  368. // Returns:
  369. //     Returns an RGB value representing the column background color.
  370. //-----------------------------------------------------------------------
  371. COLORREF GetListBackColor() const;
  372. // ----------------------------------------------------------------------
  373. // Summary:
  374. //     Call this member function to set the RGB color value used for the
  375. //     list background color.
  376. // Parameters:
  377. //     crListBack :  An RGB value representing the list background color.
  378. // ----------------------------------------------------------------------
  379. void SetListBackColor(COLORREF crListBack);
  380. //-----------------------------------------------------------------------
  381. // Summary:
  382. //     Call this member function to return the RGB color value used
  383. //     for the column text color.
  384. // Returns:
  385. //     Returns an RGB value representing the column text color.
  386. //-----------------------------------------------------------------------
  387. COLORREF GetListTextColor() const;
  388. // ---------------------------------------------------------------------
  389. // Summary:
  390. //     Call this member function to set the RGB color value used for the
  391. //     list text color.
  392. // Parameters:
  393. //     crListText :  An RGB value representing the list text color.
  394. // ---------------------------------------------------------------------
  395. void SetListTextColor(COLORREF crListText);
  396. //-----------------------------------------------------------------------
  397. // Summary:
  398. //     Call this member function to return the RGB color value used
  399. //     for the sorted column background color.
  400. // Returns:
  401. //     Returns an RGB value representing the sorted column background color.
  402. //-----------------------------------------------------------------------
  403. COLORREF GetSortBackColor() const;
  404. //-----------------------------------------------------------------------
  405. // Summary:
  406. //     Call this member function to set the RGB color value used
  407. //     for the sorted column background color.
  408. // Parameters:
  409. //     crSortBack - An RGB value representing the sorted column background color.
  410. //-----------------------------------------------------------------------
  411. void SetSortBackColor(COLORREF crSortBack);
  412. //-----------------------------------------------------------------------
  413. // Summary:
  414. //     Call this member function to return the RGB color value used
  415. //     for the sorted column text color.
  416. // Returns:
  417. //     Returns an RGB value representing the sorted column text color.
  418. //-----------------------------------------------------------------------
  419. COLORREF GetSortTextColor() const;
  420. //-----------------------------------------------------------------------
  421. // Summary:
  422. //     Call this member function to set the RGB color value used
  423. //     for the sorted column text color.
  424. // Parameters:
  425. //     crSortText - An RGB value representing the sorted column text color.
  426. //-----------------------------------------------------------------------
  427. void SetSortTextColor(COLORREF crSortText);
  428. //-----------------------------------------------------------------------
  429. // Summary:
  430. //     Call this member function to enable or disable sorted column
  431. //     colors.
  432. // Parameters:
  433. //     bEnable - true to enable sorted column colors, false to disable.
  434. //-----------------------------------------------------------------------
  435. void EnableUserSortColor(bool bEnable);
  436. //-----------------------------------------------------------------------
  437. // Summary:
  438. //     Call this member function to determine if sorted column color
  439. //     is enabled.
  440. // Returns:
  441. //     true if sorted column colors are enabled, otherwise false.
  442. //-----------------------------------------------------------------------
  443. bool IsUserSortColor() const;
  444. //-----------------------------------------------------------------------
  445. // Summary:
  446. //     Call this member function to enable or disable user defined
  447. //     colors.
  448. // Parameters:
  449. //     bEnable - true to enable user defined colors, false to disable.
  450. //-----------------------------------------------------------------------
  451. void EnableUserListColor(bool bEnable);
  452. //-----------------------------------------------------------------------
  453. // Summary:
  454. //     Call this member function to determine if user defined colors
  455. //     are enabled.
  456. // Returns:
  457. //     true if user defined colors are enabled, otherwise false.
  458. //-----------------------------------------------------------------------
  459. bool IsUserListColor() const;
  460. //-----------------------------------------------------------------------
  461. // Summary:
  462. //     Call this member function to enable or disable user defined row
  463. //     colors.
  464. // Parameters:
  465. //     bEnable - true to enable user defined row colors, false to disable.
  466. //-----------------------------------------------------------------------
  467. void EnableUserRowColor(bool bEnable);
  468. //-----------------------------------------------------------------------
  469. // Summary:
  470. //     Call this member function to determine if user defined row colors
  471. //     are enabled.
  472. // Returns:
  473. //     true if user defined row colors are enabled, otherwise false.
  474. //-----------------------------------------------------------------------
  475. bool IsUserRowColor() const;
  476. //-----------------------------------------------------------------------
  477. // Summary:
  478. //     Call this member function to automatically set the font for
  479. //     the list control when the control is initialized to use the
  480. //     toolkit default font. This will also reset the font for the
  481. //     header control as well.
  482. // Parameters:
  483. //     bAutoFont - true to enable auto font, otherwise false.
  484. //-----------------------------------------------------------------------
  485. void SetAutoFont(bool bAutoFont);
  486. protected:
  487. //-----------------------------------------------------------------------
  488. // Summary:
  489. //     This member function is called by the CXTListBase class to
  490. //     perform initialization when the window is created or sub-classed.
  491. // Returns:
  492. //     TRUE if the window was successfully initialized, otherwise FALSE.
  493. //-----------------------------------------------------------------------
  494. virtual bool Init();
  495. //-----------------------------------------------------------------------
  496. // Summary:
  497. //     Sets the list control pointer.
  498. // Parameters:
  499. //     pListCtrl - Points to the CListCtrl object to attach.
  500. // Remarks:
  501. //     This member function is called by the derived class to
  502. //     set the list control pointer for this implementation.
  503. //-----------------------------------------------------------------------
  504. void ImplAttach(CListCtrl* pListCtrl);
  505. //-----------------------------------------------------------------------
  506. // Summary:
  507. //     Called from the derived class OnNotify method.
  508. // Parameters:
  509. //     wParam  - Identifies the control that sends the message if the
  510. //               message is from a control. Otherwise, wParam is 0.
  511. //     lParam  - Pointer to a notification message (NMHDR) structure
  512. //               that contains the notification code and additional
  513. //               information. For some notification messages, this
  514. //               parameter points to a larger structure that has the
  515. //               NMHDR structure as its first member.
  516. //     pResult - Pointer to an LRESULT variable in which to store the
  517. //               result code if the message is handled.
  518. // Remarks:
  519. //     The derived calls this member function
  520. //     to processes the message map for control notification, the
  521. //               derived class should call this member function from
  522. //               the CWnd::OnNotify override.
  523. // Returns:
  524. //     An application returns nonzero if it processes this message; otherwise
  525. //               0.
  526. //-----------------------------------------------------------------------
  527. virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  528. //-------------------------------------------------------------------------
  529. // Summary:
  530. //     Updates colors and size values.
  531. // Remarks:
  532. //     This member function is called whenever there is a need to
  533. //     refresh the colors and size values that are set using system
  534. //     values. Usually called when the operating system color or
  535. //     settings change.
  536. //-------------------------------------------------------------------------
  537. void RefreshMetrics();
  538. protected:
  539. //{{AFX_CODEJOCK_PRIVATE
  540. //{{AFX_MSG
  541. afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
  542. afx_msg void OnDestroy();
  543. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  544. afx_msg void OnPaint();
  545. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
  546. afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  547. //}}AFX_MSG
  548. //}}AFX_CODEJOCK_PRIVATE
  549. protected:
  550. //{{AFX_CODEJOCK_PRIVATE
  551. // Needed in order to access protected functions.
  552. class CListCtrl_Friendly : public CXTListCtrlHelper { friend class CXTListBase; };
  553. //}}AFX_CODEJOCK_PRIVATE
  554. int                 m_nMinColWidth; // Minimum width for columns.
  555. int                 m_nMaxColWidth; // Maximum width for columns.
  556. int                 m_nSortedCol;   // Index of the currently selected column.
  557. bool                m_bAutoFont;    // If true, the font will automatically be set for the control
  558. bool                m_bAutoSave;    // true if saving the column widths.
  559. bool                m_bListColor;   // true if user defined colors are used for background and text.
  560. bool                m_bRowColor;    // true if rows are drawn with user defined colors.
  561. bool                m_bSortColor;   // true if the sorted column is drawn in color.
  562. bool                m_bAscending;   // Flag to determine the sorting order.
  563. bool                m_bNoColSizing; // If true, column sizing is disabled.
  564. CString             m_strSection;   // Registry section name.
  565. CString             m_strEntry;     // Registry entry name.
  566. CString             m_strDefault;   // Registry default value.
  567. COLORREF            m_crListText;   // RGB value representing the row text color.
  568. COLORREF            m_crListBack;   // RGB value representing the row text background color.
  569. COLORREF            m_crSortText;   // RGB value for sort column text color.
  570. COLORREF            m_crSortBack;   // RGB value for sort column background color.
  571. CRowColorList     m_arRowColor;     // List of user defined text and background row colors.
  572. CXTFlatHeaderCtrl   m_flatHeader;   // Subclassed flat header control.
  573. CListCtrl_Friendly* m_pListCtrl;    // List control instance.
  574. };
  575. //===========================================================================
  576. AFX_INLINE DWORD CXTListBase::GetExtendedStyle() {
  577. ASSERT(::IsWindow(m_pListCtrl->GetSafeHwnd())); return (DWORD)m_pListCtrl->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
  578. }
  579. AFX_INLINE void CXTListBase::SetExtendedStyle(DWORD dwExStyle) {
  580. ASSERT(::IsWindow(m_pListCtrl->GetSafeHwnd())); m_pListCtrl->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, GetExtendedStyle() | dwExStyle);
  581. }
  582. AFX_INLINE void CXTListBase::SetMinimumColSize(int nSize) {
  583. m_nMinColWidth = nSize; GetFlatHeaderCtrl()->SetMinSize(nSize);
  584. }
  585. AFX_INLINE int CXTListBase::GetMinimumColSize() {
  586. return m_nMinColWidth;
  587. }
  588. AFX_INLINE int CXTListBase::GetMaximumColSize() {
  589. return m_nMaxColWidth;
  590. }
  591. AFX_INLINE void CXTListBase::DisableColumnSizing(bool bDisable) {
  592. m_bNoColSizing = bDisable;
  593. }
  594. AFX_INLINE void CXTListBase::SetListBackColor(COLORREF crListBack) {
  595. m_crListBack = crListBack;
  596. }
  597. AFX_INLINE void CXTListBase::SetListTextColor(COLORREF crListText) {
  598. m_crListText = crListText;
  599. }
  600. AFX_INLINE void CXTListBase::EnableUserListColor(bool bEnable) {
  601. m_bListColor = bEnable;
  602. }
  603. AFX_INLINE void CXTListBase::SetRowColors(COLORREF clrText, COLORREF clrTextBk) {
  604. SetListTextColor(clrText); SetListBackColor(clrTextBk); EnableUserListColor(true); m_pListCtrl->RedrawWindow();
  605. }
  606. AFX_INLINE COLORREF CXTListBase::GetListBackColor() const {
  607. return m_bListColor ? ((m_crListBack == (COLORREF)-1) ? ::GetSysColor(COLOR_WINDOW) : m_crListBack) : ::GetSysColor(COLOR_WINDOW);
  608. }
  609. AFX_INLINE COLORREF CXTListBase::GetListTextColor() const {
  610. return m_bListColor ? ((m_crListText == (COLORREF)-1) ? ::GetSysColor(COLOR_WINDOWTEXT) : m_crListText) : ::GetSysColor(COLOR_WINDOWTEXT);
  611. }
  612. AFX_INLINE COLORREF CXTListBase::GetSortBackColor() const {
  613. return (m_crSortBack == (COLORREF)-1) ? GetListBackColor() : m_crSortBack;
  614. }
  615. AFX_INLINE void CXTListBase::SetSortBackColor(COLORREF crSortBack) {
  616. m_crSortBack = crSortBack;
  617. }
  618. AFX_INLINE COLORREF CXTListBase::GetSortTextColor() const {
  619. return (m_crSortText == (COLORREF)-1) ? GetListTextColor():m_crSortText;
  620. }
  621. AFX_INLINE void CXTListBase::SetSortTextColor(COLORREF crSortText) {
  622. m_crSortText = crSortText;
  623. }
  624. AFX_INLINE void CXTListBase::EnableUserSortColor(bool bEnable) {
  625. m_bSortColor = bEnable;
  626. }
  627. AFX_INLINE bool CXTListBase::IsUserSortColor() const {
  628. return m_bSortColor;
  629. }
  630. AFX_INLINE bool CXTListBase::IsUserListColor() const {
  631. return m_bListColor;
  632. }
  633. AFX_INLINE void CXTListBase::EnableUserRowColor(bool bEnable) {
  634. m_bRowColor = bEnable;
  635. }
  636. AFX_INLINE bool CXTListBase::IsUserRowColor() const {
  637. return m_bRowColor;
  638. }
  639. AFX_INLINE void CXTListBase::SetAutoFont(bool bAutoFont) {
  640. m_bAutoFont = bAutoFont;
  641. }
  642. //{{AFX_CODEJOCK_PRIVATE
  643. #define DECLATE_LIST_BASE(ClassName, List, Base)
  644. class _XTP_EXT_CLASS ClassName : public List, public Base
  645. {
  646. public:
  647. ClassName() {
  648. m_bPreSubclassInit = true;
  649. }   
  650. virtual DWORD GetExtendedStyle() {
  651. return Base::GetExtendedStyle();
  652. }   
  653. virtual void SetExtendedStyle(DWORD dwExStyle){
  654. Base::SetExtendedStyle(dwExStyle);
  655. }   
  656. protected:
  657. virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {
  658. return Base::OnNotify(wParam, lParam, pResult);
  659. }   
  660. virtual bool Init() {
  661. return Base::Init();
  662. }   
  663. virtual void PreSubclassWindow()
  664. {
  665. List::PreSubclassWindow();
  666. if (m_bPreSubclassInit)
  667. Init();
  668. }   
  669. virtual BOOL PreCreateWindow(CREATESTRUCT& cs)
  670. {
  671. if (!List::PreCreateWindow(cs))
  672. return FALSE;
  673. m_bPreSubclassInit = false;
  674. return TRUE;
  675. }   
  676. bool m_bPreSubclassInit;
  677. afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) {
  678. Base::OnCustomDraw(pNMHDR, pResult);
  679. }   
  680. afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection) {
  681. List::OnSettingChange(uFlags, lpszSection);
  682. Base::OnSettingChange(uFlags, lpszSection);
  683. }   
  684. afx_msg void OnDestroy(){
  685. Base::OnDestroy();
  686. List::OnDestroy();
  687. }   
  688. afx_msg BOOL OnEraseBkgnd(CDC* pDC){
  689. return Base::OnEraseBkgnd(pDC);
  690. }   
  691. afx_msg void OnPaint() {
  692. Base::OnPaint();
  693. }   
  694. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam) {
  695. return Base::OnPrintClient(wParam, lParam);
  696. }   
  697. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
  698. {
  699. if (List::OnCreate(lpCreateStruct) == -1)
  700. return -1;
  701. Init();
  702. return 0;
  703. }   
  704. };
  705. #define ON_LISTCTRL_REFLECT
  706. ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
  707. ON_WM_DESTROY()
  708. ON_WM_ERASEBKGND()
  709. ON_WM_PAINT()
  710. ON_MESSAGE(WM_PRINTCLIENT, OnPrintClient)
  711. ON_WM_CREATE()
  712. ON_WM_SETTINGCHANGE
  713. //}}AFX_CODEJOCK_PRIVATE
  714. #endif // #if !defined(__XTLISTBASE_H__)