实现ListCtrl控件中 数据项可编辑功能
来源:互联网 发布:网易云课堂 mac 编辑:程序博客网 时间:2024/04/29 20:36
实现ListCtrl控件中数据项可编辑功能
编写:
要实现ListCtrl可编辑功能,只要在响应鼠标双击事件时,获取List中当前鼠标所在的Iem和SubItem序号,并获取当前数据项的Point位置,然后在响应的位置即时生成一个编辑框,并将原来数据项中的内容写入到编辑框中等待编辑,最后将编辑过的内容再保存到数据项中。
为了实现这个功能,我需要对CListCtrl和CEdit进行子类化。
1、 CEidtListCtrl的实现
class CEditListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CEditListCtrl)
public:
CEditListCtrl();
virtual ~CEditListCtrl();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDblClk(UINTnFlags, CPoint point);
afx_msgLRESULT OnEditEnd(WPARAM wParam,LPARAM lParam = FALSE);
public:
void ShowEdit(bool bShow, int nItem, int nSubItem,CRect rcCtrl);
CListCtrlEditm_Edit;
};
// 双击鼠标左键促发事件
//
void CEditListCtrl::OnLButtonDblClk(UINT nFlags, CPointpoint)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRectrcCtrl;
LVHITTESTINFO lvhti;
lvhti.pt = point;
nItem =CListCtrl::SubItemHitTest(&lvhti);
if (nItem == -1) return;
nSubItem =lvhti.iSubItem;
CListCtrl::GetSubItemRect(nItem,nSubItem,LVIR_LABEL,rcCtrl);
ShowEdit(TRUE,nItem,nSubItem,rcCtrl);
CListCtrl::OnLButtonDblClk(nFlags,point);
}
//--------------------------------------------------------------------------------------------------------------
//
// 函数定义:void ShowEdit(bool bShow, int nItem, int nSubItem,CRect rcCtrl);
// 函数描述:在响应双击消息时,显示编辑框
//
void CEditListCtrl::ShowEdit(bool bShow, int nItem, int nSubItem, CRect rcCtrl)
{
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);
CFonttpFont;
tpFont.CreateStockObject(DEFAULT_GUI_FONT);
m_Edit.SetFont(&tpFont);
tpFont.DeleteObject();
}
if (bShow == TRUE)
{
CStringstrItem = CListCtrl::GetItemText(nItem,nSubItem);
m_Edit.MoveWindow(&rcCtrl);
m_Edit.ShowWindow(SW_SHOW);
m_Edit.SetWindowText(strItem);
m_Edit.SetFocus();
m_Edit.SetSel(-1);
}
else
m_Edit.ShowWindow(SW_HIDE);
}
// 编辑框失去焦点时促发事件
//
LRESULTCEditListCtrl::OnEditEnd(WPARAM wParam,LPARAM lParam)
{
CStringstrText;
m_Edit.GetWindowText(strText);
CListCtrl::SetItemText(nItem,nSubItem,strText);
m_Edit.ShowWindow(SW_HIDE);
return 0;
}
2、 CListCtrlEdit的实现
class CListCtrlEdit : public CEdit
{
DECLARE_DYNAMIC(CListCtrlEdit)
public:
CListCtrlEdit();
virtual ~CListCtrlEdit();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnKillFocus(CWnd*pNewWnd);
};
// 编辑框失去焦点来促发自定义消息函数
//
void CListCtrlEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
// 发送消息
CWnd*pParent = this->GetParent();
::PostMessage(pParent->GetSafeHwnd(),WM_USER_EDIT_END,0,0);
}
3、 可编辑数据项的实现
只需要将你要实现的ListCtrl使用CEditListCtrl作为基类就可以了。
- 实现ListCtrl控件中 数据项可编辑功能
- 实现ListCtrl控件中 数据项可编辑功能
- 实现ListCtrl控件中 数据项可编辑功能
- 可编辑子项ListCtrl控件的完整实现
- win32快速实现listctrl控件的可编辑子项
- 在DataGrid控件中编辑数据项
- 126.如何在DataGrid控件中实现数据项的编辑、更新、取消
- 使ListCtrl可编辑
- 使ListCtrl可编辑
- MFC可编辑列表框控件功能实现
- wxPython实现指定单元格可编辑的ListCtrl
- MFC-ListCtrl 可编辑重写
- MFC-ListCtrl 可编辑重写
- MFC-ListCtrl 可编辑重写
- MFC-ListCtrl 可编辑重写
- duilib中ListCtrl控件的实现
- duilib中ListCtrl控件的实现
- GridVIew控件选中、编辑、取消、删除数据项
- 用VC资源动态链接库解决国际化问题
- BaiAPI 简单示例
- 背包问题之0-1背包(三)
- 循环压缩某个目录
- ASP.NET中的真假分页
- 实现ListCtrl控件中 数据项可编辑功能
- Android中文api:android.accessibilityservice
- VS系统通用快捷键
- HDU 1163 Eddy's digital Roots
- CRuntimeClass的作用详解
- 合并两个单链表为递减有序的单链表
- UML建模工具的选择
- 运放短接后输出满量程
- rhel5.4下samba安装