📄 sortlistctrl.h
字号:
#ifndef SORTLISTCTRL_H
#define SORTLISTCTRL_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#undef SubclassWindow
#ifndef SORTHEADERCTRL_H
#include "SortHeaderCtrl.h"
#endif // SORTHEADERCTRL_H
#ifdef _DEBUG
#define ASSERT_VALID_STRING( str ) ASSERT( str != NULL )
#else // _DEBUG
#define ASSERT_VALID_STRING( str ) ( (void)0 )
#endif // _DEBUG
#define MAX_COLUMN_COUNT 100 // 最大列数
#define MAX_ITEMDATA_COUNT 4 // 项目数据最大数
class CSortListCtrl : public CListCtrl
{
public:
enum
{
WM_ITEM_CLICK = WM_USER + 0x1100,
WM_ITEM_ClickSubItem,
};
typedef struct _ItemAppData
{
public:
_ItemAppData()
: clrItemBK ( RGB(255,255,255) )
, clrItemText ( RGB(0,0,0) )
, bDisableEditItem ( FALSE )
{
}
COLORREF clrItemBK; // 项背景颜色
COLORREF clrItemText; // 项文字颜色
BOOL bDisableEditItem; // 该项是否禁止编辑
} t_ItemAppData;
struct ItemData
{
public:
ItemData()
: arrpsz ( NULL ), lpToolTipText(NULL), pAppItemData ( NULL )
, pShowRecordWnd ( NULL ), pcspUserText ( NULL )
{
memset ( &dwData, 0, sizeof(dwData) );
}
LPCTSTR* arrpsz;
LPTSTR lpToolTipText;
DWORD dwData[MAX_ITEMDATA_COUNT];
t_ItemAppData *pAppItemData;
LPVOID pShowRecordWnd;
CString *pcspUserText;
private:
// ban copying.
ItemData( const ItemData& );
ItemData& operator=( const ItemData& );
};
// 列类型
typedef enum _enum_column_type
{
E_COLUMN_TYPE_INVALID,
E_COLUMN_TYPE_NORMAL,
E_COLUMN_TYPE_EDIT, // 会显示一个用来输入的编辑框
E_COLUMN_TYPE_COMBO, // 会显示一个可以选择的下拉列表
E_COLUMN_TYPE_MENU, // 会显示一个用来选择的菜单
E_COLUMN_TYPE_NUM,
} E_COLUMN_TYPE;
typedef void (*CALLBACK_ListCtrl_AddListString)(int iItem, int nSubItem,
CStringArray *pStrAry_Text, E_COLUMN_TYPE eColumnType, LPVOID lpParameter);
typedef void (*CALLBACK_SortListCtrl_FreeItemMemory) ( LPVOID lpSortListCtrl, int nItem );
// 常量
enum
{
// 控件 ID
SORTLISTCTRL_START_MENU_ID = 10000,
SORTLISTCTRL_COMBO_ID = 50000,
SORTLISTCTRL_EDIT_ID = 60000,
};
// Construction
public:
CSortListCtrl();
void SetRegSection( LPCTSTR lpszSection ) { m_csSection = lpszSection; }
// Attributes
public:
CALLBACK_ListCtrl_AddListString m_Callback_ListCtrl_AddListString;
CALLBACK_SortListCtrl_FreeItemMemory m_Proc_SortListCtrl_FreeItemMemory;
// Operations
public:
BOOL SetHeadings( const CString& strHeadings );
BOOL ModifySelItemContent ( int iItem, int nSubItem );
BOOL DeleteItem( int iItem, BOOL bCallExteriorFreeFunc=TRUE );
BOOL DeleteAllItems();
void LoadColumnInfo();
void SaveColumnInfo();
BOOL SetItemText( int iItem, CStringArray &StrAry );
BOOL SetItemText( int iItem, int nSubItem, LPCTSTR lpszText );
void Sort( int iColumn, BOOL bAscending );
BOOL SetItemData(int iItem, DWORD dwData, int nIndex=0);
DWORD GetItemData(int iItem, int nIndex=0) const;
void EditItem(int iItem, int nSubItem);
void ComboItem(int iItem, int nSubItem, CStringArray &StrAry);
void PopupMenuItem(int iItem, int nSubItem, CStringArray &StrAry);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSortListCtrl)
protected:
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
virtual void Serialize( CArchive& ar );
//}}AFX_VIRTUAL
// Implementation
public:
void SetCheckAll ( BOOL fCheck = TRUE );
int FindItem ( CStringArray &StrAry );
int FindItem ( LPCTSTR lpszItemText, int nSubItem );
int FindItem( CUIntArray &UIntAry_Data );
BOOL SetOrCreateImageList ( CImageList *pImgListNor=NULL, CImageList *pImgListSma=NULL );
virtual void hwSelectOneItem(int nItem, BOOL bSelected=TRUE);
virtual void SyncSRWItem(int nStartItem);
int m_nNotSortTailItem; // 后面多少行纪录不参与排序
LPVOID GetItemShowRecordWnd(int iItem);
CString GetItemUserText(int iItem);
BOOL SetItemShowRecordWnd(int iItem, LPVOID pShowRecordWnd);
BOOL SetItemUserText(int iItem, LPCTSTR lpszUserText);
BOOL CanEdit ( int iItem );
void SetDisableEditItem ( int iItem, ... );
virtual void SetListView(DWORD dwView);
DWORD GetTypeMask ();
virtual RECT GetItemRect ( UINT nCode );
int FindItemBySubItem(int nSubItem, WPARAM lpFindVar, BOOL bInteger );
CString GetColumnText ( int nCol );
void SetColumnText ( int nCol, CString csNewColText );
int GetItemInt ( int iItem, int nSubItem );
virtual int GetColumnIndexByText ( LPCTSTR lpszColumnText );
void SetColumnType ( E_COLUMN_TYPE eColumnType, int nCol, LPVOID lpParameter=NULL );
void SetColumnType(E_COLUMN_TYPE eColumnType, LPCTSTR lpszColumnText, LPVOID lpParameter=NULL);
void ChangeLineColor(int iItem, COLORREF clrText, COLORREF clrTextBk=CLR_NONE);
void GetLineColor ( int iItem, COLORREF &clrText, COLORREF &clrTextBk );
virtual void ReSizing();
int m_nCurSelItem, m_nCurSelSubItem;
int GetSelectionMark();
int FindCell ( LPCTSTR lpszText, OUT int &nSubItem_Out,
BOOL bMatchEntire=TRUE );
void ChangeItemImage(int iItem, int nNewImageIndex);
CString GetItemText(int iItem, int nSubItem) const;
BOOL GetCurSelAllSubItemText ( CStringArray &StrAry );
virtual BOOL IsCursorInValidRect();
int PtInRect ( int iItem, CPoint &pt );
BOOL SubclassWindow();
void SetListCtrlGridAttr ( BOOL bSaveTypeMask, DWORD dwInitTypeMask );
virtual int InsertItem ( int iItem, CStringArray &StrAry, int nImageIndex );
BOOL RowIsExist ( CStringArray &StrAry );
int InsertItem ( int iItem, int nImageIndex, LPCTSTR pszText, ... );
int GetColumnCount();
BOOL InitImageList ( UINT nNormalBitmapID, UINT nSmallBitmapID=0, COLORREF crMask=RGB(255,255,0) );
BOOL InitImageList ( LPCTSTR lpszNormalBitmapFile, LPCTSTR lpszSmallBitmapFile=NULL, COLORREF crMask=RGB(255,255,0));
virtual ~CSortListCtrl();
// Set the TVHT_* flags that will trigger the display of a tooltip
WORD SetToolTipHitMask(WORD wHitMask);
BOOL SetItemToolTipText ( int iItem, LPCTSTR lpszToolTipText );
CString GetItemToolTipText ( int iItem );
static void CreateImageList ( int nSize, CImageList &ImageList );
static void CopyImageList ( CImageList &ImageList_Dst, CImageList &ImageList_Src );
int m_iNumColumns;
int m_nImageNum;
BOOL m_bSaveTypeMask; // 是否保存在列表的排列模式
DWORD m_dwInitTypeMask; // 列表的初始排列模式
CImageList m_ImageListNor, m_ImageListSma;
// Generated message map functions
protected:
virtual void InsertItemSuccess(int nItem);
virtual void ClearShowRecordView ();
// A bit mask of LVHT_* flags the control will show tooltips for
WORD m_wHitMask;
int m_nLastSelItem;
static int CALLBACK CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData );
void FreeItemMemory( const int iItem, BOOL bCallExteriorFreeFunc=TRUE );
BOOL SetTextArray( int iItem, LPCTSTR* arrpsz );
LPCTSTR* GetTextArray( int iItem ) const;
CSortHeaderCtrl m_ctlHeader;
int m_iSortColumn;
BOOL m_bSortAscending;
// Provide our own logic for HitTests, specifically, make ToolHitTests respond per SubItem
virtual afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
virtual int OnToolHitTest ( CPoint point, TOOLINFO * pTI ) const;
virtual afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
//{{AFX_MSG(CSortListCtrl)
afx_msg void OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDestroy();
afx_msg void OnCustomdrawList(NMHDR*, LRESULT*);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
BOOL SetItemAppData ( int iItem, t_ItemAppData &ItemAppData );
t_ItemAppData* GetItemAppData ( int iItem );
BOOL GetItemAppData(int iItem, t_ItemAppData &ItemAppData );
void DeleteImageList ();
void KillAllSubCtrlFocus ();
void GetItemExposeRect ( int iItem, int nSubItem, CRect &rect );
BOOL InitImageListByBmp(CBitmap *pbmpNormal, CBitmap *pbmpSmall=NULL, COLORREF crMask=RGB(255,255,0));
BOOL InsertBmpToImageList(
CImageList &ImgList,
CBitmap *pbmpInsert, // 要插入的图片
int nWidthPerImage, // 单张小图的宽度,用来计算图像列表中小图的个数
COLORREF crMask=RGB(255,255,0)
);
CString m_csSection;
CStringArray m_StrAry_CommonText;
CUIntArray m_UIntAry_ColumnType;
CComboBoxForListCtrl *m_pCombo; // 利用下拉列表来编辑
CEditForListCtrl *m_pEdit; // 用编辑框来编辑
};
int GetListCtrlImageIndex ( CListCtrl *pListCtrl, int nItem );
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // SORTLISTCTRL_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -