关于CListCtrl编辑的问题?

rrttyyyy 2009-04-08 05:02:20
我想把ListCtrl里加进去一个Edit控件实现编辑的功能,查了下资料,很乱很多都是抄来抄去的说不请什么意思,代码都有问题!

  一种思路是拖放一个Edit控件,设置为不可见(visible=false),用MoveWindow函数,再ShowWindow(true)使Edit控件可见。然后为这个Edit控件用Classwizard添加OnKillFocus事件处理.
  另一种是动态的创建CEdit控件,有些代码我看不懂,我想大家请教了:

/////////////////
要实现ListCtrl编辑功能,其实也简单,只需要在响应一个开始编辑的消息时(比如:鼠标左键双击控件时)获取当前点击的Item和SubItem的序号,获得它的位置,然后在这个位置显示一个CEdit控件就可以实现编辑功能。以下详细介绍实现:

//响应鼠标双击

void CEditListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CRect rcCtrl;
LVHITTESTINFO lvhti;
lvhti.pt = point;
int nItem = CListCtrl::SubItemHitTest(&lvhti);// 测试鼠标当前选中的ITEM和SUBITEM
if(nItem == -1)
return;
int nSubItem = lvhti.iSubItem;
CListCtrl::GetSubItemRect(nItem,nSubItem,LVIR_LABEL,rcCtrl);//获取选中位置的区域

//显示EDIT

ShowEdit(TRUE,nItem,nSubItem,rcCtrl);

CListCtrl::OnLButtonDblClk(nFlags, point);
}

//显示EDIT

void CEditListCtrl::ShowEdit(BOOL bShow,int nItem,int nIndex,CRect rcCtrl)
{

//只需要创建一次EDIT控件,如果控件没有创建,就创建EDIT.如果控件已经创建了,就控制是显示还是隐藏
if(m_edit.m_hWnd == NULL)
{
m_edit.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(0,0,0,0),this,IDC_EDIT);
m_edit.ShowWindow(SW_HIDE);
CFont tpFont;
tpFont.CreateStockObject(DEFAULT_GUI_FONT);
m_edit.SetFont(&tpFont);
tpFont.DeleteObject();
}
if(bShow == TRUE)
{
CString strItem = CListCtrl::GetItemText(nItem,nIndex);
m_edit.MoveWindow(rcCtrl);
m_edit.ShowWindow(SW_SHOW);
m_edit.SetWindowText(strItem);
::SetFocus(m_edit.GetSafeHwnd());
m_edit.SetSel(-1);
m_edit.SetCtrlData(MAKEWPARAM(nIndex,nItem));
}
else
m_edit.ShowWindow(SW_HIDE);
}



//编辑停止的时候

/*

本例在实现的时候,子类化了一个EDIT类CListCtrlEdit。

当EDIT控件失去焦点的时候,将发送一个WM_USER_EDIT_END消息到ListCtrl

ListCtrl的响应函数如下

*/

void CEditListCtrl::OnEditEnd(WPARAM wParam,LPARAM lParam)
{
if(wParam == TRUE)
{
CString strText(_T( " "));
m_edit.GetWindowText(strText);
DWORD dwData = m_edit.GetCtrlData();
int nItem= dwData> > 16; //  这里是什么意思啊,代码有严重问题!
int nIndex = dwData&0x0000ffff;
CListCtrl::SetItemText(nItem,nIndex,strText);
}
else
{

}

if(lParam == FALSE)
m_edit.ShowWindow(SW_HIDE);
}


这里的EditEnd()函数那里用到的啊 没有什么地方调用啊?
希望大家能提供一些代码参考一下!谢谢了
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dazuipiao 2011-03-25
  • 打赏
  • 举报
回复



这是位移,楼主自己这么菜 还怀疑别人代码有问题,好好学学基础知识
rrttyyyy 2009-04-08
  • 打赏
  • 举报
回复
很多资料上都这么写,究竟怎么弄啊,恳请大家指教!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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