为ListCtrl 控件添加列项代码,
InsertColumn(来自百度)
如下,还需注意,设置ListCtrl的属性 ---样式---查看---报告
for (int i = 0; i < g_Column_Count; i++)
{m_CListOnLine.InsertColumn(i, g_Column_Data[i].title,LVCFMT_CENTER,g_Column_Data[i].nWidth);
}
因为考虑到代码的可维护性,添加了一个 列表个数的全局变量
int g_Column_Count=7; //列表的个数
typedef struct
{
char *title; //列表的名称
int nWidth; //列表的宽度
}COLUMNSTRUCT;
//然后建立这个结构体变量的数组
COLUMNSTRUCT g_Column_Data[] =
{
{"IP", 148 },
{"区域", 150 },
{"计算机名/备注", 160 },
{"操作系统", 128 },
{"CPU", 80 },
{"摄像头", 81 },
{"PING", 81 }
};
还是考虑到可维护性,将开头的那段代码放到,类的成员函数中 ClassName::InitList()
然后在窗口的初始化函数OnInitDailog() 中调用 InitList()
这样 ListCtrl 控件就创建好了,但是存在一个问题,在主窗口大小变化的时候,ListCtrl 的 Item的大小没有变化
那么也就是 要在 OnSize() 函数中添加 与 Item 宽度有关的代码。我们之前定义的
typedef struct
{
char *title; //列表的名称
int nWidth; //列表的宽度
}COLUMNSTRUCT;
中的nWidth 成员就发挥了作用
首先在 InitList()函数中添加获取总宽度代码
g_Column_Online_Width+=g_Column_Data[i].nWidth; //得到总宽度
然后在 OnSize() 函数中添加 按照比例变化宽度的代码
double dcx=cx; //对话框的总宽度
if(m_CListOnLine.m_hWnd!=NULL)
{
CRect rc;
rc.left=1; //列表的左坐标
rc.top=80; //列表的上坐标
rc.right=cx-1; //列表的右坐标
rc.bottom=cy-160; //列表的下坐标
m_CListOnLine.MoveWindow(rc);
for(int i=0;i<g_Column_Count;i++){ //遍历每一个列
double dd=g_Column_Data[i].nWidth; //得到当前列的宽度
dd/=g_Column_Online_Width; //看一看当前宽度占总长度的几分之几
dd*=dcx; //用原来的长度乘以所占的几分之几得到当前的宽度
int lenth=dd; //转换为int 类型
m_CListOnLine.SetColumnWidth(i,(lenth)); //设置当前的宽度
}
}
在这个ListCtrl 控件中添加 条目(Item)
函数原型(来自百度)
2作用
3参数
m_CListOnLine.InsertItem(0,strIP); //默认为0行 这样所有插入的新列都在最上面
在实际项目中为了方便维护,可以把 一个 ListCtrl 控件需要添加的 Item 写到类中的一个成员函数中 ClassName:AddList(/* ... */)
如下, 这样只需要调用该函数即可
void CPCRemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName, CString strOS, CString strCPU, CString strVideo, CString strPing)
{
m_CListOnLine.InsertItem(0,strIP); //默认为0行 这样所有插入的新列都在最上面
m_CListOnLine.SetItemText(0,ONLINELIST_ADDR,strAddr); //设置列的显示字符 这里 ONLINELIST_ADDR等 为第二节课中的枚举类型 用这样的方法
m_CListOnLine.SetItemText(0,ONLINELIST_COMPUTER_NAME,strPCName); //解决问题会避免以后扩展时的冲突
m_CListOnLine.SetItemText(0,ONLINELIST_OS,strOS);
m_CListOnLine.SetItemText(0,ONLINELIST_CPU,strCPU);
m_CListOnLine.SetItemText(0,ONLINELIST_VIDEO,strVideo);
m_CListOnLine.SetItemText(0,ONLINELIST_PING,strPing);
}