Files
Client/Server/ToolProject/WebInfoManager/ListViewCtrlEx.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

419 lines
18 KiB
C++

/******************************************************************************
$Author$
$Modtime$
$Revision$
Description: Interfaces of the classes "CListCtrlEx" and "CListViewEx"
(list control and list view with sort icons and
colored sort column)
$Log$
******************************************************************************/
#pragma once
/*** Declaration of "workhorse" class "CListBase" ****************************/
class CListCtrlHelper;
class CListBase
{
public:
CListBase();
~CListBase();
BOOL ColorSortColumn (BOOL bEnable = TRUE, int nSortColumn = 0);
virtual void DrawSmallIcon (CDC* pDC, LVITEM* pItem, LPRECT pRect);
virtual void DrawStateIcon (CDC* pDC, LVITEM* pItem, LPRECT pRect);
virtual void DrawSubItemText (CDC* pDC, LVITEM* pItem, LVCOLUMN* pColumn,
LPRECT pRect);
void EnableColumn (int nColumn, BOOL bEnableIt = TRUE);
void EnableColumnHiding(int nColumn, BOOL bEnableIt = TRUE);
void EnableColumnSeparators(BOOL bEnable = TRUE)
{
m_bColumnSeparators = bEnable;
}
void EnableExplorerStyle();
void EnableSortIcon (BOOL bEnable = TRUE, int nSortColumn = 0);
void EnableSubItemTips (BOOL bEnable = TRUE) {m_bSubItemTips = bEnable;}
int GetColumnCount() const
{
return static_cast<int>(m_aColumnData.GetSize());
}
POSITION GetFirstCheckedItemPosition() const;
int GetNextCheckedItem (POSITION& pos) const;
int GetSortColumn () const {return m_iSortColumn;}
BOOL GetState (LPBYTE* ppState, LPUINT pnStateLen) const;
virtual const CString GetToolTip(int /*nItem*/) {return _T("");}
virtual const CString GetToolTip(int /*nItem*/, int /*nSubItem*/,
UINT /*nFlags*/, BOOL& /*bAsLabel*/)
{
return _T("");
}
BOOL IsColumnEnabled(int nColumn) const
{
return m_aColumnData[nColumn]->m_bEnabled;
}
BOOL IsSubItemWidthSufficient(int nItem, int nSubItem, LPCTSTR pszText);
BOOL KeepLabelLeft (BOOL bKeepLeft = true);
BOOL RestoreState (LPCTSTR pszSection, LPCTSTR pszEntry);
BOOL SaveState (LPCTSTR pszSection, LPCTSTR pszEntry) const;
void SetSortColumn (int nColumn);
BOOL SetState (LPBYTE pState, UINT nStateLen);
void ShowColumn (int nColumn, BOOL bShowIt = TRUE);
private:
enum EXPLORER_STYLE {NONE, XP, VISTA};
enum VISUAL_STYLE {Unknown, NotPresent, Present};
friend class CListCtrlEx;
friend class CListViewEx;
friend class CLabelEdit;
friend class CLabelTipCtrl;
struct COLUMN_DATA
{
COLUMN_DATA(): m_bEnabled (true),
m_bHidingAllowed(false),
m_bVisible (true),
m_nWidth (0),
m_nOrder (0),
m_pLVColumn (0)
{}
~COLUMN_DATA();
bool m_bEnabled;
bool m_bHidingAllowed;
bool m_bVisible;
int m_nWidth;
int m_nOrder;
LVCOLUMN* m_pLVColumn;
};
struct ITEM_DATA
{
ITEM_DATA(): m_lParam(0) {}
~ITEM_DATA();
LPARAM m_lParam;
CArray<LVITEM*> m_apLVItem;
};
static int CALLBACK CompareFunc (LPARAM lParam1, LPARAM lParam2,
LPARAM lParamSort);
void CreateSortIcons ();
void DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct);
LVCOLUMN* DupLVColumn (LVCOLUMN* pLVColumn) const;
LVITEM* DupLVItem (LVITEM* pLVItem) const;
void EraseRect (CDC* pDC, LPRECT pRect);
bool GetLabelRect (int nItem, int nSubItem, LPRECT pRect);
LVITEM* GetLVITEM (int nItem, int nSubItem = 0) const;
int GetLogicalIndex (int nPhysicalColumn) const;
int GetLogicalOrder (int nPhysicalOrder) const;
int GetPhysicalIndex (int nColumnIndex) const;
int GetPhysicalOrder (int nColumnOrder) const;
bool GetStateIconRect (int nItem, LPRECT pRect);
void HideColumn (int nColumn);
int IndexToOrder (int nIndex);
void InitializeSubCtrls ();
void InvalidateNonItemArea();
void JustifyFirstColumn (int nFormat);
BOOL OnBeginLabelEdit (NMHDR* pNMHDR);
LRESULT OnCancelEditLabel ();
BOOL OnColumnclick (NMHDR* pNMHDR, LRESULT* pResult);
BOOL OnCommand (WPARAM wParam);
void OnContextMenu (CWnd* pWnd, CPoint point);
void OnCustomDraw (NMHDR* pNMHDR, LRESULT* pResult);
LRESULT OnDeleteAllItems ();
LRESULT OnDeleteColumn (WPARAM wParam);
LRESULT OnDeleteItem (WPARAM wParam);
void OnDestroy ();
BOOL OnEndLabelEdit (NMHDR* pNMHDR);
BOOL OnEraseBkgnd (CDC* pDC);
LRESULT OnFindItem (WPARAM wParam, LPARAM lParam);
LRESULT OnGetColumn (WPARAM wParam, LPARAM lParam);
LRESULT OnGetColumnWidth (WPARAM wParam);
LRESULT OnGetColumnOrderArray(WPARAM wParam, LPARAM lParam);
BOOL OnGetdispinfo (NMHDR* pNMHDR);
LRESULT OnGetItem (LPARAM lParam);
LRESULT OnGetItemRect (WPARAM wParam, LPARAM lParam);
LRESULT OnGetItemText (WPARAM wParam, LPARAM lParam);
LRESULT OnGetSubItemRect (WPARAM wParam, LPARAM lParam);
int OnHitTest (LPARAM lParam);
void OnHScroll ();
LRESULT OnInsertColumn (WPARAM wParam, LPARAM lParam);
LRESULT OnInsertItem (LPARAM lParam);
void OnKeyDown (UINT nChar);
void OnKeyUp (UINT nChar);
void OnKillFocus ();
void OnLButtonDblClk (CPoint point);
void OnLButtonDown (CPoint point);
void OnLButtonUp ();
LRESULT OnMouseLeave ();
void OnMouseMove (CPoint point) ;
BOOL OnMouseWheel (CPoint point);
BOOL OnNotify (LPARAM lParam);
BOOL OnODCacheHint (NMHDR* pNMHDR);
void OnPaint ();
LRESULT OnSetBkColor (LPARAM lParam);
LRESULT OnSetBkImage ();
LRESULT OnSetColumn (WPARAM wParam, LPARAM lParam);
LRESULT OnSetColumnOrderArray(WPARAM wParam, LPARAM lParam);
LRESULT OnSetColumnWidth (WPARAM wParam, LPARAM lParam);
LRESULT OnSetExtendedStyle (WPARAM wParam, LPARAM lParam);
void OnSetFocus ();
LRESULT OnSetImageList (WPARAM wParam);
LRESULT OnSetItem (LPARAM lParam);
LRESULT OnSetItemText (WPARAM wParam, LPARAM lParam);
LRESULT OnSortItems (WPARAM wParam, LPARAM lParam);
void OnSysColorChange ();
int OrderToIndex (int nOrder);
void PrepareHotUnderlining();
void RedisplayColumn (int nColumn);
void RefreshToolTips ();
void SetHotCursorAndItem (LPLVHITTESTINFO pInfo);
void SetSortIcon ();
static UINT m_winver;
static VISUAL_STYLE m_visualStyle;
static const int m_iFirstColXOff;
static const int m_iNextColXOff;
static const int m_iColumnSeparatorWidth;
int m_iIconXOff; // offset of icon may vary of
// unknown reason
HTHEME m_hTheme;
CListCtrlHelper* m_pListCtrl;
bool m_bIsActive;
bool m_bMouseInClientArea;
bool m_bTopMost;
bool m_bFocusSet;
CArray<COLUMN_DATA*> m_aColumnData;
int m_iColumnHidingAllowed;
BOOL m_bColumnSeparators;
bool m_bExplorerStyle;
BOOL m_bSortIconEnabled;
BOOL m_bColorSortColumn;
COLORREF m_clrBkColor;
bool m_bBkColorKnown;
bool m_bBkImage;
CImageList m_imglstSortIcons;
CBitmap m_bmpUpArrow;
CBitmap m_bmpDownArrow;
int m_iUpArrow;
int m_iDownArrow;
DWORD m_dwColSortColor;
int m_iSortColumn;
int m_iFormatOfSubItem0;
BOOL m_bKeepLabelLeft;
bool m_bLocked;
bool m_bControl;
bool m_bIconXOffCalculated;
bool m_bFixedBkColor;
DWORD m_dwExtendedStyle;
int m_iItemUnderCursor;
int m_iHotItem;
COLORREF m_dwHotLite;
HCURSOR m_hCursorCustom;
HCURSOR m_hCursorArrow;
HCURSOR m_hCursorHand;
PFNLVCOMPARE m_pfnLVCompare;
LPARAM m_lParamSort;
CList<int> m_lstVisibleItemsPreviouslySelected;
int m_iItemLastSelected;
int m_iFirstCachedItem;
int m_iLastCachedItem;
bool m_bAlwaysGetSmallIconRect;
bool m_bIgnoreNextMouseMove;
bool m_bRefreshToolTips;
BOOL m_bSubItemTips;
bool m_bUpdateToolTips;
CToolTipCtrl* m_pToolTip;
CLabelTipCtrl* m_pLabelTip;
CString m_strCurrentToolTip;
CString m_strCurrentLabelTip;
bool m_bToolTips;
bool m_bUnfoldLabel;
BOOL m_bLabelUnfolded;
CLabelEdit* m_pLabelEdit;
CString m_strEditedLabel;
int m_iItemEdit;
bool m_bLabelEditingCancelled;
bool m_bOnEndLabelEdit;
bool m_bOnGetDispinfo;
bool m_bOnPaint;
bool m_bRepost;
int m_iCurrentItem;
int m_iCurrentSubItem;
UINT m_fCurrentFlags;
};
/*** Declaration of class "CListCtrlEx" **************************************/
class CListCtrlEx: public CListCtrl, public CListBase
{
DECLARE_DYNCREATE(CListCtrlEx);
public:
CListCtrlEx() {m_pListCtrl = reinterpret_cast<CListCtrlHelper*>(this);}
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CListBase::DrawItem(lpDrawItemStruct);
}
protected:
// Overrides
// ClassWizard generated virtual function overrides
virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam);
virtual BOOL OnNotify (WPARAM wParam, LPARAM lParam,
LRESULT* pResult);
virtual void PreSubclassWindow();
// Generated message map functions
afx_msg BOOL OnBeginLabelEdit (NMHDR* pNMHDR, LRESULT*);
afx_msg LRESULT OnCancelEditLabel (WPARAM, LPARAM);
afx_msg BOOL OnColumnclick (NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnContextMenu (CWnd* pWnd, CPoint point);
afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct);
afx_msg void OnCustomDraw (NMHDR* pNMHDR, LRESULT* pResult);
afx_msg LRESULT OnDeleteAllItems (WPARAM, LPARAM);
afx_msg LRESULT OnDeleteColumn (WPARAM wParam, LPARAM);
afx_msg LRESULT OnDeleteItem (WPARAM wParam, LPARAM);
afx_msg void OnDestroy ();
afx_msg BOOL OnEndLabelEdit (NMHDR* pNMHDR, LRESULT*);
afx_msg BOOL OnEraseBkgnd (CDC* pDC);
afx_msg LRESULT OnFindItem (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumnOrderArray(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumnWidth (WPARAM wParam, LPARAM);
afx_msg BOOL OnGetdispinfo (NMHDR* pNMHDR, LRESULT*);
afx_msg LRESULT OnGetExtendedStyle (WPARAM, LPARAM);
afx_msg LRESULT OnGetItem (WPARAM, LPARAM lParam);
afx_msg LRESULT OnGetItemRect (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetItemText (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetSubItemRect (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHitTest (WPARAM, LPARAM lParam);
afx_msg void OnHScroll (UINT nSBCode, UINT nPos,
CScrollBar* pScrollBar);
afx_msg LRESULT OnInsertColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnInsertItem (WPARAM, LPARAM lParam);
afx_msg void OnKeyDown (UINT nChar, UINT nRepCnt,
UINT nFlags);
afx_msg void OnKeyUp (UINT nChar, UINT nRepCnt,
UINT nFlags);
afx_msg void OnKillFocus (CWnd* pNewWnd);
afx_msg void OnLButtonDblClk (UINT nFlags, CPoint point);
afx_msg void OnLButtonDown (UINT nFlags, CPoint point);
afx_msg void OnLButtonUp (UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseLeave (WPARAM, LPARAM);
afx_msg void OnMouseMove (UINT, CPoint point);
afx_msg BOOL OnMouseWheel (UINT, short, CPoint pt);
afx_msg BOOL OnODCacheHint (NMHDR* pNMHDR, LRESULT*);
afx_msg void OnPaint ();
afx_msg LRESULT OnSetBkColor (WPARAM, LPARAM lParam);
afx_msg LRESULT OnSetBkImage (WPARAM, LPARAM);
afx_msg LRESULT OnSetColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetColumnOrderArray(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetColumnWidth (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetExtendedStyle (WPARAM wParam, LPARAM lParam);
afx_msg void OnSetFocus (CWnd* pOldWnd);
afx_msg LRESULT OnSetImageList (WPARAM wParam, LPARAM);
afx_msg LRESULT OnSetItem (WPARAM, LPARAM lParam);
afx_msg LRESULT OnSetItemText (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSortItems (WPARAM wParam, LPARAM lParam);
afx_msg void OnSysColorChange ();
DECLARE_MESSAGE_MAP()
};
/*** Declaration of class "CListViewEx" **************************************/
class CListViewEx: public CListView, public CListBase
{
DECLARE_DYNCREATE(CListViewEx);
public:
CListViewEx()
{
m_pListCtrl = reinterpret_cast<CListCtrlHelper*>(&GetListCtrl());
}
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CListBase::DrawItem(lpDrawItemStruct);
}
protected:
// Overrides
// ClassWizard generated virtual function overrides
virtual BOOL OnCommand (WPARAM wParam, LPARAM lParam);
virtual void OnInitialUpdate();
virtual BOOL OnNotify (WPARAM wParam, LPARAM lParam, LRESULT* pResult);
// Generated message map functions
afx_msg BOOL OnBeginLabelEdit (NMHDR* pNMHDR, LRESULT*);
afx_msg LRESULT OnCancelEditLabel (WPARAM, LPARAM);
afx_msg BOOL OnColumnclick (NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnContextMenu (CWnd* pWnd, CPoint point);
afx_msg void OnCustomDraw (NMHDR* pNMHDR, LRESULT* pResult);
afx_msg LRESULT OnDeleteAllItems (WPARAM, LPARAM);
afx_msg LRESULT OnDeleteColumn (WPARAM wParam, LPARAM);
afx_msg LRESULT OnDeleteItem (WPARAM wParam, LPARAM);
afx_msg void OnDestroy ();
afx_msg BOOL OnEndLabelEdit (NMHDR* pNMHDR, LRESULT*);
afx_msg BOOL OnEraseBkgnd (CDC* pDC);
afx_msg LRESULT OnFindItem (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumnOrderArray(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetColumnWidth (WPARAM wParam, LPARAM);
afx_msg BOOL OnGetdispinfo (NMHDR* pNMHDR, LRESULT*);
afx_msg LRESULT OnGetExtendedStyle (WPARAM, LPARAM);
afx_msg LRESULT OnGetItem (WPARAM, LPARAM lParam);
afx_msg LRESULT OnGetItemRect (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetItemText (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnGetSubItemRect (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHitTest (WPARAM, LPARAM lParam);
afx_msg void OnHScroll (UINT nSBCode, UINT nPos,
CScrollBar* pScrollBar);
afx_msg LRESULT OnInsertColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnInsertItem (WPARAM, LPARAM lParam);
afx_msg void OnKeyDown (UINT nChar, UINT nRepCnt,
UINT nFlags);
afx_msg void OnKeyUp (UINT nChar, UINT nRepCnt,
UINT nFlags);
afx_msg void OnKillFocus (CWnd* pNewWnd);
afx_msg void OnLButtonDblClk (UINT nFlags, CPoint point);
afx_msg void OnLButtonDown (UINT nFlags, CPoint point);
afx_msg void OnLButtonUp (UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseLeave (WPARAM, LPARAM);
afx_msg void OnMouseMove (UINT, CPoint point);
afx_msg BOOL OnMouseWheel (UINT, short, CPoint pt);
afx_msg BOOL OnODCacheHint (NMHDR* pNMHDR, LRESULT*);
afx_msg void OnPaint ();
afx_msg LRESULT OnSetBkColor (WPARAM, LPARAM);
afx_msg LRESULT OnSetBkImage (WPARAM, LPARAM);
afx_msg LRESULT OnSetColumn (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetColumnOrderArray(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetColumnWidth (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSetExtendedStyle (WPARAM wParam, LPARAM lParam);
afx_msg void OnSetFocus (CWnd* pOldWnd);
afx_msg LRESULT OnSetImageList (WPARAM wParam, LPARAM);
afx_msg LRESULT OnSetItem (WPARAM, LPARAM lParam);
afx_msg LRESULT OnSetItemText (WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnSortItems (WPARAM wParam, LPARAM lParam);
afx_msg void OnSysColorChange ();
DECLARE_MESSAGE_MAP()
};