ComboListCtrl.h
上传用户:flyanjing
上传日期:2015-10-09
资源大小:649k
文件大小:5k
- #pragma once
- // CComboListCtrl
- /*******************************************************************************
- Author : Aravindan Premkumar
- Unregistered Copyright 2003 : Aravindan Premkumar
- All Rights Reserved
- This piece of code does not have any registered copyright and is free to be
- used as necessary. The user is free to modify as per the requirements. As a
- fellow developer, all that I expect and request for is to be given the
- credit for intially developing this reusable code by not removing my name as
- the author.
- *******************************************************************************/
- #if !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)
- #define AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- //the max listCtrl columns
- #define MAX_LISTCTRL_COLUMNS 100
- #include <afxtempl.h>
- class CInPlaceCombo;
- class CInPlaceEdit;
- // User define message
- // This message is posted to the parent
- // The message can be handled to make the necessary validations, if any
- #define WM_VALIDATE WM_USER + 0x7FFD
- // User define message
- // This message is posted to the parent
- // The message should be handled to spcify the items to the added to the combo
- #define WM_SET_ITEMS WM_USER + 0x7FFC
- class CComboListCtrl : public CListCtrl
- {
- public:
- // Implementation
- typedef enum {MODE_READONLY,MODE_DIGITAL_EDIT,MODE_TEXT_EDIT,MODE_COMBO} COMBOLISTCTRL_COLUMN_MODE;
- // Constructor
- CComboListCtrl();
- // Destructor
- virtual ~CComboListCtrl();
- // Sets/Resets the column which support the in place combo box
- void SetComboColumns(int iColumnIndex, bool bSet = true);
- // Sets/Resets the column which support the in place edit control
- void SetReadOnlyColumns(int iColumnIndex, bool bSet = true);
- // Sets the valid characters for the edit ctrl
- void SetValidEditCtrlCharacters(CString& rstrValidCharacters);
- // Sets the vertical scroll
- void EnableVScroll(bool bEnable = true);
- // Sets the horizontal scroll
- void EnableHScroll(bool bEnable = true);
- //insert column
- int CComboListCtrl::InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat = LVCFMT_LEFT,int nWidth = -1,int nSubItem = -1);
- //Get column counts
- int GetColumnCounts();
- //delete all column
- void DeleteAllColumn();
- //set column Valid char string
- void SetColumnValidEditCtrlCharacters(CString &rstrValidCharacters,int column = -1);
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CComboListCtrl)
- //}}AFX_VIRTUAL
- protected:
- // Methods
- // Generated message map functions
- //{{AFX_MSG(CComboListCtrl)
- afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
- afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
- afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
- afx_msg void OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- private:
- // Implementation
- // Returns the row & column index of the column on which mouse click event has occured
- bool HitTestEx(CPoint& rHitPoint, int* pRowIndex, int* pColumnIndex) const;
- // Creates and displays the in place combo box
- CInPlaceCombo* ShowInPlaceList(int iRowIndex, int iColumnIndex, CStringList& rComboItemsList,
- CString strCurSelecetion = "", int iSel = -1);
- // Creates and displays the in place edit control
- CInPlaceEdit* ShowInPlaceEdit(int iRowIndex, int iColumnIndex, CString& rstrCurSelection);
- // Calculates the cell rect
- void CalculateCellRect(int iColumnIndex, int iRowIndex, CRect& robCellRect);
- // Checks whether column supports in place combo box
- bool IsCombo(int iColumnIndex);
- // Checks whether column is read only
- bool IsReadOnly(int iColumnIndex);
- // Scrolls the list ctrl to bring the in place ctrl to the view
- void ScrollToView(int iColumnIndex, /*int iOffSet, */CRect& obCellRect);
- // Attributes
- // List of columns that support the in place combo box
- CList<int, int> m_ComboSupportColumnsList;
- // List of columns that are read only
- CList<int, int> m_ReadOnlyColumnsList;
- // Valid characters
- CString m_strValidEditCtrlChars;
- // The window style of the in place edit ctrl
- DWORD m_dwEditCtrlStyle;
- // The window style of the in place combo ctrl
- DWORD m_dwDropDownCtrlStyle;
- //columnCounts
- int m_iColumnCounts;
- //column types
- COMBOLISTCTRL_COLUMN_MODE m_modeColumn[MAX_LISTCTRL_COLUMNS];
- //column
- CString m_strValidChars[MAX_LISTCTRL_COLUMNS];
- //int m_
- };
- /////////////////////////////////////////////////////////////////////////////
- //{{AFX_INSERT_LOCATION}}
- // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
- #endif // !defined(AFX_COMBOLISTCTRL_H__9089600F_374F_4BFC_9482_DEAC0E7133E8__INCLUDED_)