📄 listctrlext.cpp
字号:
// ListCtrlExt.cpp : 实现文件
//
#include "stdafx.h"
#include "PortMon.h"
#include "proclist.h"
#include "viewext.h"
#include ".\listctrlext.h"
// CListCtrlExt
IMPLEMENT_DYNAMIC(CListCtrlExt, CBCGPListCtrl)
CListCtrlExt::CListCtrlExt()
{
}
CListCtrlExt::~CListCtrlExt()
{
}
BEGIN_MESSAGE_MAP(CListCtrlExt, CBCGPListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnLvnGetdispinfo)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnNMDblclk)
ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnLvnDeleteitem)
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnLvnItemchanged)
END_MESSAGE_MAP()
// CListCtrlExt 消息处理程序
void CListCtrlExt::AutoSizeColumns()
{
int maxcol = GetHeaderCtrl().GetItemCount() - 1;
SetRedraw(FALSE);
for (int col = 0; col <= maxcol; col++)
{
SetColumnWidth(col, LVSCW_AUTOSIZE);
int wc1 = GetColumnWidth(col);
SetColumnWidth(col, LVSCW_AUTOSIZE_USEHEADER);
int wc2 = GetColumnWidth(col);
int wc = max(wc1, wc2);
SetColumnWidth(col, wc);
}
SetRedraw(TRUE);
Invalidate();
}
int CListCtrlExt::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int nColumn)
{
int nResult = 0;
CViewExt *pView = (CViewExt *)GetParent();
if( pView )
{
nResult = pView->CompareItems(lParam1, lParam2, nColumn);
}
return nResult;
}
void CListCtrlExt::OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
if ( !(pDispInfo->item.mask & LVIF_TEXT) )
{
return;
}
// TODO: 在此添加控件通知处理程序代码
CString sTemp("");
CViewExt *pView = (CViewExt *)GetParent();
if( pView )
{
sTemp = pView->GetListInfo(pDispInfo->item.lParam, pDispInfo->item.iSubItem);
}
//StringCbCopy( pDispInfo->item.pszText, pDispInfo->item.cchTextMax, sTemp );
_tcscpy( pDispInfo->item.pszText, (LPCTSTR)sTemp );
*pResult = 0;
}
void CListCtrlExt::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
CViewExt *pView = (CViewExt *)GetParent();
if( pView )
{
pView->DoDefault();
}
*pResult = 0;
}
BOOL CListCtrlExt::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此添加专用代码和/或调用基类
cs.style = (cs.style & ~LVS_TYPEMASK) | LVS_REPORT;
cs.style |= LVS_AUTOARRANGE | LVS_SINGLESEL;
return CBCGPListCtrl::PreCreateWindow(cs);
}
void CListCtrlExt::OnLvnDeleteitem(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// 删除列表单元时必须释放lParam分配的结点内存
LVITEM lvi;
ZeroMemory( &lvi, sizeof(LVITEM) );
lvi.mask = LVIF_PARAM;
lvi.iItem = pNMLV->iItem;
lvi.iSubItem = 0;
// 删除事先分配的行信息结点内存
if ( GetItem( &lvi ) )
{
NETPROC_S* pHit = (NETPROC_S *)(lvi.lParam);
delete pHit;
}
*pResult = 0;
}
void CListCtrlExt::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
*pResult = 0;
if( !(pNMLV->uChanged & LVIF_STATE) || !((pNMLV->uNewState ^ pNMLV->uOldState) & LVIS_SELECTED) )
{
return;
}
// TODO: 在此添加控件通知处理程序代码
CViewExt *pView = (CViewExt *)GetParent();
if( !pView )
{
return;
}
if( pNMLV->uNewState & LVIS_SELECTED )
{
pView->OnItemChanged( pNMLV->iItem );
}
else
{
pView->OnItemChanged( -1 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -