www.pudn.com > SnifferPro.rar > MyListCtrl.cpp


// MyListCtrl.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "snifferpro.h" 
#include "MyListCtrl.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMyListCtrl 
 
CMyListCtrl::CMyListCtrl() 
{ 
	totallen=0; 
	index=0; 
} 
 
CMyListCtrl::~CMyListCtrl() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl) 
	//{{AFX_MSG_MAP(CMyListCtrl) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CMyListCtrl message handlers 
 
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{ 
	CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); 
	int row = lpDrawItemStruct->itemID; 
	CRect m_rect; 
	int offset = 0; 
	char str[20]; 
 
	//Init for Address 
	this->GetItemText(row,0,str,20); 
	offset=0; 
	//计算出位置 
    GetItemRect(row, &m_rect, LVIR_BOUNDS); 
    m_rect.left = offset ; 
    m_rect.right = m_rect.left + GetColumnWidth(0); 
	//输出内容 
	pDC->SetTextColor((::GetSysColor(COLOR_WINDOWTEXT))); 
	pDC->SetBkColor((::GetSysColor(COLOR_BACKGROUND))); 
	pDC->TextOut(m_rect.left,m_rect.top-1,str); 
 
	//Init for Column 0~F	 
 
	for(int i=1;i<=16 && (row*16+i)<=totallen;i++){ 
		//index++; 
		GetItemText(row,i,str,20); 
		char flag=str[2];//T表示高亮,F表示非高亮 
		offset += GetColumnWidth(i-1); 
		//计算出位置 
		GetItemRect(row, &m_rect, LVIR_BOUNDS); 
		m_rect.left = offset ; 
		m_rect.right = m_rect.left + GetColumnWidth(i); 
		char content[3];//剥去标志位T or F,输出内容前两个字节 
		content[0]=str[0]; 
		content[1]=str[1]; 
		content[2]=0; 
		if(flag=='F'){//没有选中 
			//输出内容 
			pDC->SetTextColor((::GetSysColor(COLOR_WINDOWTEXT))); 
			pDC->SetBkColor((::GetSysColor(COLOR_BACKGROUND))); 
			pDC->TextOut(m_rect.left,m_rect.top-1,content);	 
		} 
		else{ 
			//输出内容 
			pDC->SetTextColor((::GetSysColor(COLOR_HIGHLIGHTTEXT))); 
			pDC->SetBkColor((::GetSysColor(COLOR_HIGHLIGHT))); 
			pDC->FillRect(m_rect, &CBrush(::GetSysColor(COLOR_HIGHLIGHT))); 
			pDC->TextOut(m_rect.left,m_rect.top-1,content); 
		} 
	} 
	//Init for Context 
	this->GetItemText(row,17,str,20); 
	//计算出位置 
	offset=0; 
	for(i=0;i<=16;i++) 
		offset += GetColumnWidth(i); 
    GetItemRect(row, &m_rect, LVIR_BOUNDS); 
    m_rect.left = offset ; 
    m_rect.right = m_rect.left + GetColumnWidth(17); 
	//输出内容 
	pDC->SetTextColor((::GetSysColor(COLOR_WINDOWTEXT))); 
	pDC->SetBkColor((::GetSysColor(COLOR_BACKGROUND))); 
	pDC->TextOut(m_rect.left,m_rect.top-1,str);                       
}