您的位置:首页 > 产品设计 > UI/UE

vc ListControl设置checkbox风格,时owerdata不能设置为true---m_list.SetItemText()m_list.SetItemData()有关

2015-07-07 10:55 579 查看
网友:
http://blog.163.com/weichao1984@126/blog/static/20525954201082981647567/
这人写的非常全,很好,~\(≧▽≦)/~赞!

ListControl加checkbox属性,简单测试:

1、拖动控件,listcontrol属性如下:



2、对listcontrol添加自己的control变量 m_list

3、设置风格按键,代码:

void CListCtrlDlg::OnBnClickedButton4()
{
<span style="white-space:pre">	</span>// TODO: 在此添加控件通知处理程序代码
<span style="white-space:pre">	</span>m_list.SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
<span style="white-space:pre">		</span>LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
<span style="white-space:pre">	</span>m_list.DeleteAllItems();
}


4、插入数据按键:

m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列
m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

int nRow = m_list.InsertItem(0, "11");//插入行
m_list.SetItemText(nRow, 1, "jacky");//设置数据
int nRow1 = m_list.InsertItem(1, "12");//插入行
m_list.SetItemText(nRow1, 1, "Tom");//设置数据


5、选择按键:

POSITION pos=m_list.GetFirstSelectedItemPosition();//pos就是行索引号,晕
if(pos==NULL)
::AfxMessageBox("请选择要选中的行!");
else
{
while(pos)
{
int nIndex=-1;
nIndex	= m_list.GetNextSelectedItem(pos);//多少行--

if(nIndex >=0&&nIndex<m_list.GetItemCount())
{
m_list.SetCheck(nIndex,TRUE);
}
}
}


下面,咱说一下,这个ower data属性:

1将其设置为True的时候,程序里这么用的

m_list.SetItemCountEx(m_vAllMJKaInfo.size());

m_list.Invalidate();

这样是动态更新list界面显示的东西

2如果只是简单的 m_list.SetItemText() m_list.SetItemData()则,将这个 owerdata属性设置为False(默认也是False)

总之,一般用法就是将这个 owerdata属性设置为FALSE,在list中添加Checkbox对勾属性也没问题。

除非,你程序里动态更新list界面,用到 m_list.Invalidate();那么你的 owerdata属性就得设置为True,这时checkbox之类的属性就会有问题。

目前解决办法,2者只能保留其一,我的解决办法是在2个界面上,建立分开的listcontrol,那么一个 owerdata属性就得设置为True,另一个 owerdata属性就得设置为False这样就不会有冲突了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: