mfc实现可编辑的列表控件,输入功能,求助 15

我已经用如下代码实现了基本功能,即双击item就用一个edit框接收输入,单击其他行的item就显示到列表控件中。我现在想改进,因为每次输入都要双击很不方便,如果能用键盘... 我已经用如下代码实现了基本功能,即双击item就用一个edit框接收输入,单击其他行的item就显示到列表控件中。
我现在想改进,因为每次输入都要双击很不方便,如果能用键盘上下键切换行就能直接输入就好多了,估计要涉及到响应键盘上下键的消息,行选中与不选中的消息,需要添加一些函数,新手不知应该怎么实现,求助各位大神。
我已经写好的代码是在消息NM_DBLCLK、NM_CLICK添加成员函数:
void XXView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
if(isEdit==true)
{
CListCtrl &listControl = GetListCtrl();
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);
LVHITTESTINFO info;
info.pt = pNMItemActivate -> ptAction;//获取point信息

if (listControl.SubItemHitTest(&info)!=-1)
{
hitRow = info.iItem; //得到双击的行
hitCol = info.iSubItem; //得到双击的列

if (editItem.m_hWnd == NULL) //editItem为一输入框控件,
{
RECT rect;
rect.left=0 ;
rect.top=0 ;
rect.bottom=15 ;
rect.right=200 ;
editItem .Create(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this , 101 );
editItem.SetFont( this -> GetFont(), FALSE);
}
CRect rect;
listControl.GetSubItemRect(info.iItem, info.iSubItem, LVIR_BOUNDS, rect);
editItem.SetWindowText(listControl.GetItemText( info .iItem, info .iSubItem));
editItem.MoveWindow( & rect, TRUE);
editItem.ShowWindow( 1 );
editItem.SetFocus();
}
}
*pResult = 0;
}

void XXView::OnLClick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
if(isEdit==true)
{
CListCtrl &listControl = GetListCtrl();
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast < LPNMITEMACTIVATE > (pNMHDR);

if (editItem.m_hWnd != NULL)
{
editItem.ShowWindow( 0 );//点击其他行时,原来的编辑框要消失
if (hitRow != - 1 )//点击的是否在Listctrl控件内
{
CString text;
editItem.GetWindowText(text);
listControl.SetItemText(hitRow, hitCol, text);//把编辑框的字符复制到listctrl格子中
hitCol = hitRow = - 1 ;
}
*pResult = 0;
}
展开
 我来答
小陆仁
2014-03-06 · TA获得超过162个赞
知道小有建树答主
回答量:255
采纳率:0%
帮助的人:167万
展开全部
ON_NOTIFY_REFLECT(LVN_KEYDOWN.........................)
int icrusel =m_listctrl->GetNextItem(-1,LVIS_SELECTED|LVNI_ALL);

if (pLVKeyDow->wVKey == VK_UP && icrusel!=0)
{

m_listctrl->SetItemState(-1,0,LVIS_SELECTED);//在此处进行需要的操作

m_listctrl->SetItemState(icrusel-1,LVIS_SELECTED,LVIS_SELECTED);//在此处进行需要的操作
//OnNMClick(0,0);
}
else if (pLVKeyDow->wVKey == VK_DOWN && icrusel != ncount-1)
{
m_listctrl->SetItemState(-1,0,LVIS_SELECTED);//在此处进行需要的操作

m_listctrl->SetItemState(icrusel+1,LVIS_SELECTED,LVIS_SELECTED);//在此处进行需要的操作
//OnNMClick(0,0);
}
tc...3@163.com
2014-03-06
知道答主
回答量:6
采纳率:0%
帮助的人:5.3万
展开全部
现在想改进,因为每次输入都要双击很不方便,如果能用键盘上下键切换行就能直接输入就好多了,估计要涉及到响应键盘上下键的消息,行选中与不选中的消息,需要添加一些函数,新手不知应该怎么实现,求助各位大神。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式