ComboListCtrl.h
上传用户:flyanjing
上传日期:2015-10-09
资源大小:649k
文件大小:5k
开发平台:

Visual C++

  1. #pragma once
  2. // CComboListCtrl
  3. /*******************************************************************************
  4. Author : Aravindan Premkumar
  5. Unregistered Copyright 2003 : Aravindan Premkumar
  6. All Rights Reserved
  7. This piece of code does not have any registered copyright and is free to be 
  8. used as necessary. The user is free to modify as per the requirements. As a
  9. fellow developer, all that I expect and request for is to be given the 
  10. credit for intially developing this reusable code by not removing my name as 
  11. the author.
  12. *******************************************************************************/
  13. #if !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)
  14. #define AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_
  15. #if _MSC_VER > 1000
  16. #pragma once
  17. #endif // _MSC_VER > 1000
  18. //the max listCtrl columns
  19. #define MAX_LISTCTRL_COLUMNS 100
  20. #include <afxtempl.h>
  21. class CInPlaceCombo;
  22. class CInPlaceEdit;
  23. // User define message 
  24. // This message is posted to the parent
  25. // The message can be handled to make the necessary validations, if any
  26. #define WM_VALIDATE WM_USER + 0x7FFD
  27. // User define message 
  28. // This message is posted to the parent
  29. // The message should be handled to spcify the items to the added to the combo
  30. #define WM_SET_ITEMS WM_USER + 0x7FFC
  31. class CComboListCtrl : public CListCtrl
  32. {
  33. public:
  34. // Implementation
  35. typedef enum {MODE_READONLY,MODE_DIGITAL_EDIT,MODE_TEXT_EDIT,MODE_COMBO} COMBOLISTCTRL_COLUMN_MODE;
  36. // Constructor
  37. CComboListCtrl();
  38. // Destructor
  39. virtual ~CComboListCtrl();
  40. // Sets/Resets the column which support the in place combo box
  41. void SetComboColumns(int iColumnIndex, bool bSet = true);
  42. // Sets/Resets the column which support the in place edit control
  43. void SetReadOnlyColumns(int iColumnIndex, bool bSet = true);
  44. // Sets the valid characters for the edit ctrl
  45. void SetValidEditCtrlCharacters(CString& rstrValidCharacters);
  46. // Sets the vertical scroll
  47. void EnableVScroll(bool bEnable = true);
  48. // Sets the horizontal scroll
  49. void EnableHScroll(bool bEnable = true);
  50. //insert column
  51. int CComboListCtrl::InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat = LVCFMT_LEFT,int nWidth = -1,int nSubItem = -1);
  52. //Get column counts
  53. int GetColumnCounts();
  54. //delete all column
  55. void DeleteAllColumn();
  56. //set column Valid char string
  57. void SetColumnValidEditCtrlCharacters(CString &rstrValidCharacters,int column = -1);
  58. // Overrides
  59. // ClassWizard generated virtual function overrides
  60. //{{AFX_VIRTUAL(CComboListCtrl)
  61. //}}AFX_VIRTUAL
  62. protected:
  63. // Methods
  64. // Generated message map functions
  65. //{{AFX_MSG(CComboListCtrl)
  66. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  67. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  68. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  69. afx_msg void OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
  70. afx_msg void OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
  71. //}}AFX_MSG
  72. DECLARE_MESSAGE_MAP()
  73. private:
  74. // Implementation
  75. // Returns the row & column index of the column on which mouse click event has occured
  76. bool HitTestEx(CPoint& rHitPoint, int* pRowIndex, int* pColumnIndex) const;
  77. // Creates and displays the in place combo box
  78. CInPlaceCombo* ShowInPlaceList(int iRowIndex, int iColumnIndex, CStringList& rComboItemsList, 
  79. CString strCurSelecetion = "", int iSel = -1);
  80. // Creates and displays the in place edit control
  81. CInPlaceEdit* ShowInPlaceEdit(int iRowIndex, int iColumnIndex, CString& rstrCurSelection);
  82. // Calculates the cell rect
  83. void CalculateCellRect(int iColumnIndex, int iRowIndex, CRect& robCellRect);
  84. // Checks whether column supports in place combo box
  85. bool IsCombo(int iColumnIndex);
  86. // Checks whether column is read only
  87. bool IsReadOnly(int iColumnIndex);
  88. // Scrolls the list ctrl to bring the in place ctrl to the view
  89. void ScrollToView(int iColumnIndex, /*int iOffSet, */CRect& obCellRect);
  90. // Attributes
  91. // List of columns that support the in place combo box
  92. CList<int, int> m_ComboSupportColumnsList;
  93. // List of columns that are read only
  94. CList<int, int> m_ReadOnlyColumnsList;
  95. // Valid characters
  96. CString m_strValidEditCtrlChars;
  97. // The window style of the in place edit ctrl
  98. DWORD m_dwEditCtrlStyle;
  99. // The window style of the in place combo ctrl
  100. DWORD m_dwDropDownCtrlStyle;
  101. //columnCounts
  102. int m_iColumnCounts;
  103. //column types
  104. COMBOLISTCTRL_COLUMN_MODE m_modeColumn[MAX_LISTCTRL_COLUMNS];
  105. //column 
  106. CString m_strValidChars[MAX_LISTCTRL_COLUMNS];
  107. //int m_
  108. };
  109. /////////////////////////////////////////////////////////////////////////////
  110. //{{AFX_INSERT_LOCATION}}
  111. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  112. #endif // !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)