clistctrl单行多行选中问题

 我用了一个clistctrl我想实现如下功能
1.鼠标点一个后要整行被选中比如说
沥沥 789
妹妹 421
粼粼 542
我要是实现鼠标点 妹妹 或者 421这一行被选中 我现在是单个被选中
2.选中后要把被选中的这行 行号返回
3.要实现在点沥沥或者 789 这行被选中,但是妹妹 421这行还是被选中的
现在状况是前一行没有被选中了
4.第二次点被选中行是,这行就不被选中了
5.看是某button被turndown 当单行被选中是这个button被点亮,2行或者2行以上被选中时button又被turndown


那位大虾能帮我实现下,我查了相关函数不能被实现。
真的不愿意,帮我找到函数,告诉如何使用也可以,谢拉。
网友回复:添加 LIST的 NM_CLICK 事件加入
m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
int nItem=GetSelectionMark();
if(nItem> =1) GetDlgItem(IDC_BUTTON)-> EnableWindow(FALSE);
else GetDlgItem(IDC_BUTTON1)-> EnableWindow(TRUE);

网友回复:错了,用这个吧


添加 LIST的 NM_CLICK 事件加入
m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
int nItem=m_listCtrl.GetNextItem(-1,LVNI_SELECTED);
if(nItem> =1) GetDlgItem(IDC_BUTTON)-> EnableWindow(FALSE);
else GetDlgItem(IDC_BUTTON1)-> EnableWindow(TRUE);
网友回复:要先设置ListCtrl的属性:
SingleSelection: false

本篇文章来源于 www.itzhe.cn IT者网站  原文链接:http://www.itzhe.cn/article/20080904/218770.html

 

 

 

 

 

 

 

 

ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,

故总结了一下自己的使用经验,以供参考使用。

  先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,

然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标

的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二

来描述第一点,第二点,这个是参照《Effective C++》的叫法,俺觉得这么

叫比较COOL :)

 条款一:设置ListCtrl的风格

 在CSDN上常常看到有人问怎么设置风格的,他们ListCtrl的样子是一个列表

,有横条和竖条分界线,然后选中一行,要整一行都选中,而不是只有某一列

被选中,等等,这里给一个比较全面的设置方法。

//获得原有风格
 DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
 dwStyle &= ~(LVS_TYPEMASK);
 dwStyle &= ~(LVS_EDITLABELS);

 //设置新风格
    SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,

dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);


 //设置扩展风格
 DWORD styles =

LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;

 ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles,

styles );

其中LVS_EX_FULLROWSELECT 就是前面说得整行选中

LVS_EX_GRIDLINES 网格线(只适用与report风格的listctrl)

LVS_EX_CHECKBOXES 前面加个checkbox

pListCtrl->SetExtendedStyle(  m_listctrl.GetExtendedStyle()

|LVS_EX_SUBITEMIMAGES);


这也是一个很重要的属性,这样的话,可以在列表中加ICON,记得windows的

任务管理器吗,你想做得那样,这个属性也要加哦,这个我以后会讲的~

条款二:加入列头

  这是一个比较实质的东西,给列表框分列,然后加上列头

  代码说话,来了

  TCHAR rgtsz[2][10] = {_T("列头1"), _T("列头2")};
 
 LV_COLUMN lvcolumn;
 CRect rect;
 m_listctrl.GetWindowRect(&rect);
 for(int i=0;i<2;i++)
 {
   lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT
              | LVCF_WIDTH | LVCF_ORDER;
   lvcolumn.fmt = LVCFMT_LEFT;
   lvcolumn.pszText = rgtsz[i];
   lvcolumn.iSubItem = i;
   lvcolumn.iOrder = i;
   if(i==0)
   {
      lvcolumn.cx = rect.Width()*3/5 ;
   }
   else
     lvcolumn.cx = rect.Width()*2/5;
      

   m_listctrl.InsertColumn(i, &lvcolumn);
  }

这是插入两列的做法,你要插入20列??随便你,依样画葫芦~~

 lvcolumn.mask 中那个mask可以有各种属性,具体去看msdn吧,

 

条款三:把记录,插入列表框中

 int nIndex = m_listctrl.GetItemCount();

  LV_ITEM   lvitemAdd = {0};
  lvitemAdd.mask = LVIF_TEXT;
  lvitemAdd.iItem = nIndex ;
  lvitemAdd.iSubItem

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Clistctrl是MFC中非常常用的控件之一,可以用于显示列表,表格等等。其中一个常用的特性是单行颜色。在列表中,我们可以为每一行添加不同的背景颜色,以区分不同的记录或状态。具体方法如下: 1. 定义一个CListCtrl对象,在对话框资源中添加一个List Control控件。 2. 在OnInitDialog函数中为List Control添加表头,并设置表头的宽度。 3. 在List Control控件中添加行,并为每行设置不同的颜色。我们可以使用CListCtrl::SetItemBkColor函数来设置每行的背景颜色。 4. 在设置颜色时,我们需要为每一行设置相应的参数。可以使用CListCtrl::SetItemData函数为每行设置一个唯一的标识符,用来区分不同的行。 以下代码演示了如何设置List Control控件的单行颜色: CListCtrl m_listCtrl; m_listCtrl.Create(WS_VISIBLE|WS_CHILD|LVS_REPORT,CRect(10,50,600,400),this,ID_LISTCTRL); m_listCtrl.InsertColumn(0, _T("Column1"), LVCFMT_LEFT,75); m_listCtrl.InsertColumn(1, _T("Column2"), LVCFMT_LEFT,100); m_listCtrl.InsertColumn(2, _T("Column3"), LVCFMT_LEFT,200); //设置第一行为红色 m_listCtrl.InsertItem(0, _T("First")); m_listCtrl.SetItemBkColor(0, RGB(255, 0, 0)); //设置第二行为绿色 m_listCtrl.InsertItem(1, _T("Second")); m_listCtrl.SetItemBkColor(1, RGB(0, 255, 0)); //设置第三行为蓝色 m_listCtrl.InsertItem(2, _T("Third")); m_listCtrl.SetItemBkColor(2, RGB(0, 0, 255)); 通过以上代码,我们就可以在控件中为每一行添加不同的背景颜色,以便于用户的查看和区分不同记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值