www.pudn.com > 3.rar > ChattersListView.cpp


// ChattersListView.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "ChatServer.h" 
#include "ChattersListView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CChattersListView 
 
IMPLEMENT_DYNCREATE(CChattersListView, CListView) 
 
CChattersListView::CChattersListView() 
{ 
	m_Row = 0; 
} 
 
CChattersListView::~CChattersListView() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CChattersListView, CListView) 
	//{{AFX_MSG_MAP(CChattersListView) 
	ON_WM_CREATE() 
	ON_WM_SIZE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CChattersListView drawing 
 
void CChattersListView::OnDraw(CDC* pDC) 
{ 
	CDocument* pDoc = GetDocument(); 
	// TODO: add draw code here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CChattersListView diagnostics 
 
#ifdef _DEBUG 
void CChattersListView::AssertValid() const 
{ 
	CListView::AssertValid(); 
} 
 
void CChattersListView::Dump(CDumpContext& dc) const 
{ 
	CListView::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CChattersListView message handlers 
BOOL CChattersListView::PreCreateWindow(CREATESTRUCT& cs)  
{ 
	//设定风格为详细报表显示 
	cs.style |= LVS_REPORT;	 
	return CListView::PreCreateWindow(cs); 
} 
 
int CChattersListView::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CListView::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	// TODO: Add your specialized creation code here 
	CRect rect; 
	GetClientRect(&rect); 
	GetListCtrl().InsertColumn(0, "用户名" ); 
	GetListCtrl().InsertColumn(1, "登录时间"); 
	GetListCtrl().InsertColumn(2, "地址"); 
	return 0; 
} 
 
void CChattersListView::OnSize(UINT nType, int cx, int cy)  
{ 
	CListView::OnSize(nType, cx, cy); 
	 
	// TODO: Add your message handler code here 
	GetListCtrl().SetColumnWidth(0, cx/3); 
	GetListCtrl().SetColumnWidth(1, cx/3); 
	GetListCtrl().SetColumnWidth(2, cx/3); 
} 
 
void CChattersListView::AddChatter(CString Name, CString IPAddress, UINT Port) 
{ 
	//插入用户名 
	LVITEM lvi; 
	lvi.mask = LVIF_TEXT; 
	lvi.iItem = m_Row++; 
	lvi.iSubItem = 0; 
	lvi.pszText = Name.GetBuffer(Name.GetLength()); 
	int iActualItem = GetListCtrl().InsertItem(&lvi); 
 
	//插入登录时间 
	//得到系统时间 
    time_t t; 
    struct tm *ptm; 
    time(&t); 
    ptm = localtime(&t); 
	//将其转化成字符形式 
	CString sDate; 
	sDate.Format("%.19s", asctime(ptm)); 
	//得到小时、分钟、秒 
	int iHours , iMins , iSecs; 
	iHours = atoi(sDate.Mid(11,2)); 
	iMins =atoi(sDate.Mid(14,2)); 
	iSecs = atoi(sDate.Mid(17,2)); 
	//将其转换成字符串 
	CString sHours, sMins, sSecs; 
	sHours.Format("%d:", iHours); 
	if(iHours < 10) 
		sHours.Insert(0, '0'); 
	sMins.Format("%d:", iMins); 
	if(iMins < 10) 
		sMins.Insert(0, '0'); 
	sSecs.Format("%d", iSecs); 
	if(iSecs < 10) 
		sSecs.Insert(0, '0'); 
	CString sDisplayTime; 
	sDisplayTime = sHours+sMins+sSecs; 
	lvi.mask = LVIF_TEXT; 
	lvi.iItem = iActualItem; 
	lvi.iSubItem = 1; 
	lvi.pszText = sDisplayTime.GetBuffer(sDisplayTime.GetLength()); 
	BOOL test = GetListCtrl().SetItem(&lvi); 
 
	//插入客户端地址 
	CString sIPPort; 
	sIPPort.Format("%s:%d", IPAddress, Port); 
	lvi.mask = LVIF_TEXT; 
	lvi.iSubItem = 2; 
	lvi.pszText = sIPPort.GetBuffer(sIPPort.GetLength()); 
	GetListCtrl().SetItem(&lvi); 
} 
 
void CChattersListView::DeleteChatter(CString Name) 
{ 
	LVFINDINFO lvfi; 
	lvfi.flags = LVFI_STRING; 
	lvfi.psz = Name.GetBuffer(Name.GetLength()); 
	//在列表中查找用户名,得到其索引值 
	int nFoundAt = GetListCtrl().FindItem(&lvfi); 
	//如果找到则将其删除 
	if(nFoundAt != -1) 
		GetListCtrl().DeleteItem(nFoundAt); 
}