列表设计思路:
(1)服务端上线后要显示在列表中,这样有一个统一的函数来处理会使代码更加简洁。
(2)消息显示分为成功失败两种,还要在其中显示消息产生的时间,这样也应该有一个统一的函数来处理。
我们先来添加一个函数:
void CGhostDlg::AddList(CString strIP, CString strPCName, CString strOS, CString strProxy) { m_list_oline.InsertItem(0,strIP); //默认为0行 这样所有插入的新列都在最上面 m_list_oline.SetItemText(0,ONLINELIST_COMPUTER_NAME,strPCName); //解决问题会避免以后扩展时的冲突 m_list_oline.SetItemText(0,ONLINELIST_OS,strOS); //依次插入字符。索引分别为0,1,2,3 m_list_oline.SetItemText(0,ONLINELIST_Proxy,strProxy); }
我们来测试一下伪上线:
接下来设计日志条目:
void CGhostDlg::ShowMessage(bool bIsOK, CString strMsg) { CString strIsOK,strTime; CTime t=CTime::GetCurrentTime(); strTime=t.Format("%H:%M:%S"); if (bIsOK) { strIsOK="执行成功"; }else{ strIsOK="执行失败"; } m_list_msg.InsertItem(0,strIsOK); m_list_msg.SetItemText(0,1,strTime); m_list_msg.SetItemText(0,2,strMsg); }
将函数运用到伪上线函数里去。
那我们还有一个问题,现在列表框中的数据只能单选,不能选择一行,那如何做到选择一行呢?
来到InitList()中插入代码:
m_list_oline.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list_msg.SetExtendedStyle(LVS_EX_FULLROWSELECT);
完成,最后编译看效果。