ListView的多选问题(另有高分赠送)

nustchen 2003-06-22 07:15:24
程序需要实现如下功能:

在我的ListView当中,每两个Item是相关的,因此这两个Item的选择是连动的,要么
都被选择,要么都不被选择。我在LVN_ITEMCHANGED和NM_CLICK中进行处理,但是都不行。一松开鼠标就不行了。

请高手帮忙。只要解决问题还可以给分。
...全文
79 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyoujie 2003-06-25
  • 打赏
  • 举报
回复
up
nustchen 2003-06-25
  • 打赏
  • 举报
回复
非常感谢 我先试试 不过这样完全自己处理 多选的情况很多 我试试能否全部处理过来
  • 打赏
  • 举报
回复
没有设置多选风格吧。
nustchen 2003-06-24
  • 打赏
  • 举报
回复
To common_man(谢安王导):
“LVS_SHOWSELALWAYS”加了的
common_man 2003-06-24
  • 打赏
  • 举报
回复
就这么多了,你试试
common_man 2003-06-24
  • 打赏
  • 举报
回复
void CNustchenView::OnInitialUpdate()
{
CListView::OnInitialUpdate();


CListCtrl &ctl=GetListCtrl();
ctl.ModifyStyle(0,LVS_REPORT);
ctl.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
GetListCtrl().InsertColumn(0," ",LVCFMT_LEFT,20);
GetListCtrl().InsertColumn(1,"就餐日期 ",LVCFMT_LEFT,200);
GetListCtrl().InsertColumn(2,"就餐者姓名 ",LVCFMT_LEFT,200);
GetListCtrl().InsertColumn(3,"餐后权值 ",LVCFMT_LEFT,200);

CString str;
for ( int i = 0; i < 10; i++ )
{
str.Format( "yang%d", i );
GetListCtrl().InsertItem( i, str );

str.Format( "common%d", i );
GetListCtrl().SetItemText( i, 1, str );

str.Format( "common_man%d", i );
GetListCtrl().SetItemText( i, 2, str );
}
}
common_man 2003-06-24
  • 打赏
  • 举报
回复
我做了一个例子,可以实现一次只选中相邻的两个(偶数号的在前,奇数号的在后),如(0,1),(2,3)等,
我的处理代码如下:
void CNustchenView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default


UINT uFlags = 0;
CListCtrl& ListCtrl = GetListCtrl();
//进行命中测试
int nHitItem = ListCtrl.HitTest(point, &uFlags);

CListView::OnLButtonDown(nFlags, point);//这句话的位置也很重要!只能在这里!

//鼠标点击在某个item之上
if (uFlags & LVHT_ONITEMLABEL)
{


if ( nHitItem % 2 == 0 )
{
LVITEM lv;
lv.mask = LVIF_STATE;
lv.stateMask = LVIS_SELECTED;
lv.state = LVIS_SELECTED;
ListCtrl.SetItemState( nHitItem, &lv );
ListCtrl.SetItemState( nHitItem + 1, &lv );
}
else
{
LVITEM lv;
lv.mask = LVIF_STATE;
lv.stateMask = LVIS_SELECTED;
lv.state = LVIS_SELECTED;
ListCtrl.SetItemState( nHitItem, &lv );
ListCtrl.SetItemState( nHitItem - 1, &lv );
}


return;//这个return非常重要!
}

}
nustchen 2003-06-24
  • 打赏
  • 举报
回复
To fsxdxh(假行僧) :
也设置了

请有时间的大侠自己试试,如果成功有高分相送,目前可用分多达10000以上
njtu 2003-06-23
  • 打赏
  • 举报
回复

NM_CLICK
CListCtrl::setitemstat()
guoxiny 2003-06-23
  • 打赏
  • 举报
回复
只有自己画了
nustchen 2003-06-23
  • 打赏
  • 举报
回复
两个Item的相关是指选择的相关性
common_man 2003-06-23
  • 打赏
  • 举报
回复
这个风格加上没有:
LVS_SHOWSELALWAYS
nustchen 2003-06-23
  • 打赏
  • 举报
回复
To njtu(天地不容):
不行 我已经试过了 一放开鼠标就不对了啊
caslwzgks 2003-06-22
  • 打赏
  • 举报
回复
使用自画样式试一试。
common_man 2003-06-22
  • 打赏
  • 举报
回复
每两个Item是相关的
——是怎样的相关呢?是物理位置连在一起吗?还是文字内容相关?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧