我现在使用ListView控件读出各个盘符中的文件列表,使用上下键即可实现对文件列表的选择
现在若用字母键w实现上键动能,s键实现下键功能,该如何去做
现在若用字母键w实现上键动能,s键实现下键功能,该如何去做
解决方案 »
- 不是直接从数据库里提出数据的话,应该怎么写这个语句呢?
- 帮改一个C++ WMI COM程序
- VC调用存储过程,在涉及到临时表的存储过程中返回指定SELECT语句的记录集,要怎么实现啊
- 刚开始学编程,弄不清楚几个概念.什么是结构,什么是类?
- 请问各位用VC++主要写什么方面的软件
- debug没问题,但是release有问题:error LNK2001: unresolved external symbol _main
- MFC开发CAD的求助
- 如何用程序实现改变IDC_STATIC的内容?
- 怎样使窗口总是在最前方显示?即使它没有获得焦点
- 关于Cookie
- 在VC++开发的应用程序中,如何得知别人ping我?
- 要开发ActiveX控件了,前辈们给点学习建议
获取当前选择的项GetSelectionMark
如果想上移焦点就在这个值上减一
下移就加一
设置选中用SetItemState
SetItemStata(item,未选择)
SetItemStata(item+-1,选择)
index=GetSelectionMark()-1;
m_List.SetItemState (index,0x2000, LVS_SHOWSELALWAYS);//设为选中状态
这样做,为什么不行呢?
{
// TODO: Add your message handler code here and/or call default
if (nChar == 'w' || nChar == 'W')
{
CListCtrl& List = GetListCtrl();
int pos = int(List.GetFirstSelectedItemPosition()) - 1;
if (pos > 0)
{
List.SetItemState(pos,0,LVIS_SELECTED);
List.SetItemState(pos-1,LVIS_SELECTED,LVIS_SELECTED);
}
return;
}
if (nChar == 's' || nChar == 'S')
{
CListCtrl& List = GetListCtrl();
int pos = int(List.GetFirstSelectedItemPosition()) - 1;
if (pos < List.GetItemCount() - 1)
{
List.SetItemState(pos,0,LVIS_SELECTED);
List.SetItemState(pos+1,LVIS_SELECTED,LVIS_SELECTED);
}
return;
}
//其他的字符照常处理
CListView::OnChar(nChar, nRepCnt, nFlags);
}
{
// TODO: Add your message handler code here and/or call default
if (nChar == 'w' || nChar == 'W')
{
CListCtrl& List = GetListCtrl();
int pos = int(List.GetFirstSelectedItemPosition()) - 1;
if (pos > 0)
{
List.SetItemState(pos,0,LVIS_SELECTED);
List.SetItemState(pos-1,LVIS_SELECTED,LVIS_SELECTED);
}
return;
}
if (nChar == 's' || nChar == 'S')
{
CListCtrl& List = GetListCtrl();
int pos = int(List.GetFirstSelectedItemPosition()) - 1;
if (pos < List.GetItemCount() - 1)
{
List.SetItemState(pos,0,LVIS_SELECTED);
List.SetItemState(pos+1,LVIS_SELECTED,LVIS_SELECTED);
}
return;
}
//其他的字符照常处理
CListView::OnChar(nChar, nRepCnt, nFlags);
}
你的listctrl是不是没设置single selection
如果你不需要同时选中多行的话这个项应该设为true
if(pMsg->wParam==w)
{
pMsg->wParam=up;//(up假设是方向键上的值)
}
if(pMsg->wParam==s)
{
pMsg->wParam=do;//(do假设是方向键下的值)
}
|LVS_SINGLESEL