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

📄 listctrlext.cpp

📁 远程网络监视程序的源码
💻 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 + -