MFC --- listCtrl 控件

为ListCtrl 控件添加列项代码,

InsertColumn(来自百度)

函数属于CListCtrl类中的。
位于vc 安装目录的vc\atlmfc\include路径下。
函数功能:在报告模式下插入一列
函数原型:int InsertColumn(int nCol, const LVCOLUMN* pColumn);
int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);
参数: nCol表示要插入列的列号。
pColumn 为新建列属性的LVCOLUMN结构的地址。
对于第二种 函数重载,参数lpszcolumnHeading 为列标题的字符串的地址,所以可以使用一个字符串,比如 "姓名"。
nFormat 指定列对齐方式的整数, 缺省值是左对齐。它可以为下列值之一:LVCFMT_LEFT,LVCFMT_RIGHT或LVCFMT_CENTER。
nWidth 以像素为单位的列宽。 缺省值为-1,表示没有设置列宽。
nSubItem 与列相关联的子项的索引。缺省值为-1,表示没有子项与列相关。


如下,还需注意,设置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)


函数原型(来自百度)

int InsertItem( const LVITEM* pItem );
int InsertItem( int nItem, LPCTSTR lpszItem );
int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );
int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );
其中,nItem是控件中行的索引 、lpszItem是控件头的名字。
一般我们用的比较多的是第二种和第三种,其中第三种是建立一个带有头标的项。

2作用

用于MFC中 CListCtrl控件加入列表项。

3参数

第一个参数是节点名
第二个参数是树节点未选中时使用的图标下标,
第三个参数是树节点选中时使用的图标下标,
第四个参数是本节点的父节点,第二、三个参数都是针对树的图像列表而言的。CImageList* SetImageList( CImageList * pImageList, int nImageListType );给树插入图像列表.



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); 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值