📄 listviewctrlex.cpp
字号:
/*** Information needed to display a list view item **************************/
BOOL CListViewEx::OnGetdispinfo(NMHDR* pNMHDR, LRESULT*)
{
return CListBase::OnGetdispinfo(pNMHDR);
}
/*** The extended list view style will be retrieved **************************/
LRESULT CListViewEx::OnGetExtendedStyle(WPARAM, LPARAM)
{
return m_dwExtendedStyle;
}
/*** Some or all of a list view item's attributes will be retrieved **********/
LRESULT CListViewEx::OnGetItem(WPARAM, LPARAM lParam)
{
return CListBase::OnGetItem(lParam);
}
/*** The text of a list view item or subitem will be retrieved ***************/
LRESULT CListViewEx::OnGetItemText(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnGetItemText(wParam, lParam);
}
/*** The list-view item at a specified position will be determined ***********/
LRESULT CListViewEx::OnHitTest(WPARAM, LPARAM lParam)
{
return CListBase::OnHitTest(lParam);
}
/*** List control has been scrolled horizontally *****************************/
void CListViewEx::OnHScroll(UINT, UINT, CScrollBar*)
{
CListBase::OnHScroll();
}
/*** A new column in a list-view control will be inserted ********************/
LRESULT CListViewEx::OnInsertColumn(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnInsertColumn(wParam, lParam);
}
/*** A new item in a list-view control will be inserted **********************/
LRESULT CListViewEx::OnInsertItem(WPARAM, LPARAM lParam)
{
return CListBase::OnInsertItem(lParam);
}
/*** A key has been pressed *************************************************/
void CListViewEx::OnKeyDown(UINT nChar, UINT, UINT)
{
CListBase::OnKeyDown(nChar);
}
/*** A key has been released *************************************************/
void CListViewEx::OnKeyUp(UINT nChar, UINT, UINT)
{
CListBase::OnKeyUp(nChar);
}
/*** List control loses input focus ******************************************/
void CListViewEx::OnKillFocus(CWnd*)
{
CListBase::OnKillFocus();
}
/*** The user double-clicks the left mouse button ****************************/
void CListViewEx::OnLButtonDblClk(UINT, CPoint point)
{
CListBase::OnLButtonDblClk(point);
}
/*** The user presses the left mouse button **********************************/
void CListViewEx::OnLButtonDown(UINT, CPoint point)
{
CListBase::OnLButtonDown(point);
}
/*** The user releases the left mouse button *********************************/
void CListViewEx::OnLButtonUp(UINT, CPoint)
{
CListBase::OnLButtonUp();
}
/*** The mouse has been moved ************************************************/
void CListViewEx::OnMouseMove(UINT, CPoint point)
{
CListBase::OnMouseMove(point);
}
/*** Divider in header control has been dragged ******************************/
BOOL CListViewEx::OnNotify(WPARAM, LPARAM lParam, LRESULT*)
{
return CListBase::OnNotify(lParam);
}
/*** The contents of the display area of a virtual list view control have ****/
/*** been changed ****/
BOOL CListViewEx::OnODCacheHint(NMHDR* pNMHDR, LRESULT*)
{
return CListBase::OnODCacheHint(pNMHDR);
}
/*** The background color of the list view control will be set ***************/
LRESULT CListViewEx::OnSetBkColor(WPARAM, LPARAM)
{
return CListBase::OnSetBkColor();
}
/*** The attributes of a list view column will be set ************************/
LRESULT CListViewEx::OnSetColumn(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetColumn(wParam, lParam);
}
/*** The left-to-right order of columns in a list view control will be set ***/
LRESULT CListViewEx::OnSetColumnOrderArray(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetColumnOrderArray(wParam, lParam);
}
/*** The width of a column in a list view control will be changed ************/
LRESULT CListViewEx::OnSetColumnWidth(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetColumnWidth(wParam, lParam);
}
/*** The extended list view style will be set ********************************/
LRESULT CListViewEx::OnSetExtendedStyle(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetExtendedStyle(wParam, lParam);
}
/*** List control gains input focus ******************************************/
void CListViewEx::OnSetFocus(CWnd*)
{
CListBase::OnSetFocus();
}
/*** An image list will be assigned ******************************************/
LRESULT CListViewEx::OnSetImageList(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetImageList(wParam, lParam);
}
/*** Some or all of a list view item's attributes will be set ****************/
LRESULT CListViewEx::OnSetItem(WPARAM, LPARAM lParam)
{
return CListBase::OnSetItem(lParam);
}
/*** The state of an item in a list view control will be changed *************/
LRESULT CListViewEx::OnSetItemText(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSetItemText(wParam, lParam);
}
/*** The items of a list view control will be sorted *************************/
LRESULT CListViewEx::OnSortItems(WPARAM wParam, LPARAM lParam)
{
return CListBase::OnSortItems(wParam, lParam);
}
/*** System colors have been changed *****************************************/
void CListViewEx::OnSysColorChange()
{
CListBase::OnSysColorChange();
}
/*** Table of message handlers ***********************************************/
BEGIN_MESSAGE_MAP(CListViewEx, CListView)
//{{AFX_MSG_MAP(CListViewEx)
ON_WM_SYSCOLORCHANGE()
ON_WM_ERASEBKGND()
ON_WM_HSCROLL()
ON_WM_KILLFOCUS()
ON_WM_SETFOCUS()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
ON_WM_KEYDOWN()
ON_WM_KEYUP()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_DESTROY()
ON_WM_CONTEXTMENU()
//}}AFX_MSG_MAP
ON_MESSAGE(LVM_DELETEALLITEMS, OnDeleteAllItems)
ON_MESSAGE(LVM_DELETECOLUMN, OnDeleteColumn)
ON_MESSAGE(LVM_DELETEITEM, OnDeleteItem)
ON_MESSAGE(LVM_FINDITEM, OnFindItem)
ON_MESSAGE(LVM_GETCOLUMN, OnGetColumn)
ON_MESSAGE(LVM_GETCOLUMNORDERARRAY, OnGetColumnOrderArray)
ON_MESSAGE(LVM_GETCOLUMNWIDTH, OnGetColumnWidth)
ON_MESSAGE(LVM_GETEXTENDEDLISTVIEWSTYLE , OnGetExtendedStyle)
ON_MESSAGE(LVM_GETITEM, OnGetItem)
ON_MESSAGE(LVM_GETITEMTEXT, OnGetItemText)
ON_MESSAGE(LVM_HITTEST, OnHitTest)
ON_MESSAGE(LVM_INSERTCOLUMN, OnInsertColumn)
ON_MESSAGE(LVM_INSERTITEM, OnInsertItem)
ON_MESSAGE(LVM_SETBKCOLOR, OnSetBkColor)
ON_MESSAGE(LVM_SETCOLUMN, OnSetColumn)
ON_MESSAGE(LVM_SETCOLUMNORDERARRAY, OnSetColumnOrderArray)
ON_MESSAGE(LVM_SETCOLUMNWIDTH, OnSetColumnWidth)
ON_MESSAGE(LVM_SETEXTENDEDLISTVIEWSTYLE , OnSetExtendedStyle)
ON_MESSAGE(LVM_SETIMAGELIST, OnSetImageList)
ON_MESSAGE(LVM_SETITEM, OnSetItem)
ON_MESSAGE(LVM_SETITEMTEXT, OnSetItemText)
ON_MESSAGE(LVM_SORTITEMS, OnSortItems)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_NOTIFY_REFLECT_EX(LVN_COLUMNCLICK, OnColumnclick)
ON_NOTIFY_REFLECT_EX(LVN_GETDISPINFO, OnGetdispinfo)
ON_NOTIFY_REFLECT_EX(LVN_ODCACHEHINT, OnODCacheHint)
END_MESSAGE_MAP()
/*** Definition of helper class "CListCtrlHelper" ****************************/
class CListCtrlHelper: public CListCtrl
{
public:
LRESULT Default ();
LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CListCtrlHelper)
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CListCtrlHelper)
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/*** Public member functions *************************************************/
/*** Message handlers ********************************************************/
LRESULT CListCtrlHelper::Default()
{
return CListCtrl::Default();
}
LRESULT CListCtrlHelper::DefWindowProc(UINT message, WPARAM wParam,
LPARAM lParam)
{
return CListCtrl::DefWindowProc(message, wParam, lParam);
}
void CListCtrlHelper::OnDestroy()
{
CListCtrl::OnDestroy();
}
void CListCtrlHelper::OnMouseMove(UINT nFlags, CPoint point)
{
CListCtrl::OnMouseMove(nFlags, point);
}
/*** Table of message handlers ***********************************************/
BEGIN_MESSAGE_MAP(CListCtrlHelper, CListCtrl)
//{{AFX_MSG_MAP(CListCtrlHelper)
ON_WM_MOUSEMOVE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*** Definition of "workhorse" class "CListBase" *****************************/
CListBase::VISUAL_STYLE CListBase::m_visualStyle = Unknown; // visual style?
const int CListBase::m_nFirstColXOff = 2; // x-off of first col
const int CListBase::m_nNextColXOff = 6; // y-off of other cols
/*** Public member functions *************************************************/
/*** Constructor *************************************************************/
CListBase::CListBase()
{
if (m_visualStyle == Unknown)
{
m_visualStyle = NotPresent;
HINSTANCE hinstDll;
hinstDll = LoadLibrary(_T("COMCTL32.DLL"));
if (hinstDll)
{
DLLGETVERSIONPROC pDllGetVersion =
reinterpret_cast<DLLGETVERSIONPROC>(GetProcAddress(hinstDll,
"DllGetVersion"));
// Because some DLLs might not implement this function, you must test for
// it explicitly. Depending on the particular DLL, the lack of a
// DllGetVersion function can be a useful indicator of the version.
if (pDllGetVersion)
{
DLLVERSIONINFO dvi = {sizeof(DLLVERSIONINFO)};
if (SUCCEEDED((*pDllGetVersion)(&dvi)) && dvi.dwMajorVersion >= 6)
m_visualStyle = Present;
}
FreeLibrary(hinstDll);
}
}
m_nIconXOff = 4;
m_pListCtrl = 0;
m_nColumnHidingAllowed = 0;
m_bSortIconEnabled = FALSE;
m_bColorSortColumn = FALSE;
m_nSortColumn = 0;
m_bKeepLabelLeft = false;
m_bLocked = false;
m_bControl = false;
m_bIconXOffCalculated = false;
m_dwExtendedStyle = 0;
m_nHotItem = -1;
m_dwHotLite = _winver <= 0x0400 ?
RGB(0, 0, 128) : GetSysColor(COLOR_HOTLIGHT);
m_hcursorCustom = 0;
m_hcursorArrow = 0;
m_hcursorHand = 0;
m_nFirstCachedItem = INT_MAX;
m_nLastCachedItem = 0;
m_bOnGetDispinfo = false;
}
/*** Destructor **************************************************************/
CListBase::~CListBase()
{
// remove remembered column data
for (INT_PTR i = m_aColumnData.GetUpperBound(); i >= 0; i--)
delete m_aColumnData[i];
if (_winver <= 0x400 && m_hcursorHand) DestroyCursor(m_hcursorHand);
}
/*** Enable or disable coloring of sort column *******************************/
#if _MSC_VER >= 1300
#pragma runtime_checks("c", off) // due to a flaw in the definition of
#endif // Get[R|G|B]Value
void CListBase::ColorSortColumn(BOOL bEnable, int nSortColumn)
{
ASSERT(m_pListCtrl);
if (bEnable == m_bColorSortColumn &&
(nSortColumn == 0 || nSortColumn == m_nSortColumn)) return;
if (bEnable)
{
// 256 colors --> don't color sort column
CDC* pDC = m_pListCtrl->GetDC();
bool bColor = pDC->GetDeviceCaps(BITSPIXEL) > 8;
m_pListCtrl->ReleaseDC(pDC);
if (!bColor) return;
}
if (bEnable != m_bColorSortColumn)
{
if (bEnable)
{
DWORD dwColNormalColor = m_pListCtrl->GetBkColor();
// emulate sort column coloring of Windows XP explorer
UINT nRed = GetRValue(dwColNormalColor);
UINT nGreen = GetGValue(dwColNormalColor);
UINT nBlue = GetBValue(dwColNormalColor);
if (nRed > 240 && nGreen > 240 && nBlue > 240)
{
nRed -= 8;
nGreen -= 8;
nBlue -= 8;
}
else
{
if (nRed < 232) nRed += nRed / 10; else nRed = 255;
if (nGreen < 232) nGreen += nGreen / 10; else nGreen = 255;
if (nBlue < 232) nBlue += nBlue / 10; else nBlue = 255;
}
m_dwColSortColor = RGB(nRed, nGreen, nBlue);
}
m_bColorSortColumn = bEnable;
}
if (nSortColumn != 0) m_nSortColumn = nSortColumn;
m_pListCtrl->Invalidate();
}
#if _MSC_VER >= 1300
#pragma runtime_checks("c", restore)
#endif
/*** Draw small icon *********************************************************/
void CListBase::DrawSmallIcon(CDC* pDC, LVITEM* pItem, LPRECT pRect)
{
ASSERT(m_pListCtrl);
if (pItem->iImage > 0)
{
CImageList* pimglst = m_pListCtrl->GetImageList(LVSIL_SMALL);
if (pimglst)
{
IMAGEINFO imgInfo;
if (pimglst->GetImageInfo(pItem->iImage, &imgInfo))
{
pimglst->DrawIndirect(
pDC, pItem->iImage, CPoint(pRect->left, pRect->top),
CSize(__min(pRect->right - pRect->left + 1,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -