导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

CListCtrl 不按ctrl或shift 就可以选择多行,如何实现?在线等

andytopxu 2010-07-21 09:51:36
请教高人,CListCtrl,如何实现不按ctrl或shift就可以进行多行选择?
看了一些帖子说,默认就是多选,但是是需要按ctrl或shift的,不符合lz要求。
还有一个说重写drawitem的,这个lz不会,还请问哪位高人做过,烦告之
还有一些说是捕捉hdn_itemclick 消息,我试了,CListCtrl连这个消息处理函数都没进去,

我崩溃了,各位高人,在下披头散发冰天雪地跪求良方,请赐!!!
...全文
91 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
andytopxu 2010-07-22
楼上的给了我提醒,勉强搞定可以用了,如下,参考:
#include <afxtempl.h>
CList<int,int> g_naSel;
void CTest1Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int iSel = pNMListView->iItem;

POSITION pos=g_naSel.Find(iSel);
if(pos!=NULL) {
g_naSel.RemoveAt(pos);
//CString str;str.Format("RemoveAt:%d",iSel);AfxMessageBox(str);
}
else{
g_naSel.AddTail(iSel);
//CString str;str.Format("AddTail:%d",iSel);AfxMessageBox(str);
}
for (int ii=0;ii<m_lstInfo.GetItemCount();ii++)
{
m_lstInfo.SetItemState(ii, 0, LVIS_SELECTED);
}
for(pos=g_naSel.GetHeadPosition();pos!=NULL;)
{
int i=g_naSel.GetNext(pos);
//CString str;str.Format("SetItemState:%d",i);AfxMessageBox(str);
m_lstInfo.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
}
*pResult = 0;
}
回复
Liberty-Bird 2010-07-21

//全局变量
int* m_naSel;//选中项目的索引数组
int m_nSelCnt;//选中的数量
CListCtrl m_clcList;//列表控件

在单击列表控件的消息响应函数中添加一下代码:
//将失去选中状态的项目设定为选中状态
if(m_naSel)
{
LVITEM stvi;
stvi.mask=LVIF_STATE;
stvi.stateMask=LVIS_SELECTED;
stvi.state=LVIS_SELECTED;
for(int i=0;i<m_nSelCnt;i++)
{
stvi.iItem=m_naSel[i];
m_clcList.SetItem(&stvi);
}
delete[] m_naSel;
}

//重新获取选定的项目索引数组
int nSelCnt=m_clcList.GetSelectedCount();
m_naSel=new int[nSelCnt];
int nCnt=0;
POSITION pos=m_clcList.GetFirstSelectedItemPosition();
int nIndex;
while((nIndex=m_clcList.GetNextSelectedItem(pos))>-1)
m_naSel[nCnt++]=nIndex;
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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