⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortlistctrl.h

📁 ◆◆◆ 《投掷飞镖记分工具》◆◆◆ 操作系统 : Windows Mobile 5.0 说明 : 中秋节和家人赏月
💻 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 + -