实现列表CListCtrl可点击编辑
来源:互联网 发布:浙江大学 网络服务中心 编辑:程序博客网 时间:2024/05/19 21:01
双击list控件上某个单元,出现编辑框,编辑后可确认修改。
需要在代码中管理一个eidt,在双击时,在列表对应位置用eidt覆盖,确认或进行其他操作时,隐藏edit即可。
下面的代码是一个头文件,使用控件绑定。
使用时,随便找一个cpp里头写一下宏DECLARE_EditListCtlMESSAGE_MAP
将控件绑定的类型改成EditListCtl即可。
#pragma once
class ICListCtrlEditCallBack
{
public:
virtual void ListCtrlEditCallBack(CString txt)=0;
};
class CListCtrlEdit:public CEdit
{
ICListCtrlEditCallBack* m_pICListCtrlEditCallBack;
DECLARE_MESSAGE_MAP()
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_RETURN)
{
CString txt;
GetWindowText(txt);
m_pICListCtrlEditCallBack->ListCtrlEditCallBack(txt);
ShowWindow(SW_HIDE);
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
public:
CListCtrlEdit(ICListCtrlEditCallBack* _pICListCtrlEditCallBack):m_pICListCtrlEditCallBack(_pICListCtrlEditCallBack){}
};
class EditListCtl:public CListCtrl,public ICListCtrlEditCallBack
{
int m_hitCol;
int m_hitRow;
CListCtrlEdit *m_pEdit;
DECLARE_MESSAGE_MAP()
public:
EditListCtl()
{
m_hitCol = 0;
m_hitRow = 0;
m_pEdit = NULL;
}
void OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
if (NULL == m_pEdit)
{
m_pEdit = new CListCtrlEdit(this);
m_pEdit->Create(WS_CHILD|ES_LEFT|WS_BORDER|ES_AUTOHSCROLL|ES_WANTRETURN|ES_MULTILINE,CRect(0,0,0,0),this,1);
}
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
LVHITTESTINFO info;
info.pt = pNMItemActivate->ptAction;
if (SubItemHitTest(&info) != -1)
{
m_hitRow = info.iItem;
m_hitCol = info.iSubItem;
CRect rect;
GetSubItemRect(m_hitRow,m_hitCol,LVIR_LABEL,rect);
m_pEdit->SetWindowText(GetItemText(m_hitRow,m_hitCol));
m_pEdit->MoveWindow(rect,TRUE);
m_pEdit->ShowWindow(SW_SHOW);
m_pEdit->SetFocus();
}
else
{
m_pEdit->ShowWindow(SW_HIDE);
}
*pResult = 0;
}
virtual void ListCtrlEditCallBack(CString txt)
{
SetItemText(m_hitRow,m_hitCol,txt);
}
};
#define DECLARE_EditListCtlMESSAGE_MAP \
BEGIN_MESSAGE_MAP(EditListCtl, CListCtrl)\
ON_NOTIFY_REFLECT(NM_DBLCLK, &EditListCtl::OnNMDblclk)\
END_MESSAGE_MAP()\
BEGIN_MESSAGE_MAP(CListCtrlEdit, CEdit)\
ON_WM_KEYDOWN()\
END_MESSAGE_MAP()
- 实现列表CListCtrl可点击编辑
- VC++中可编辑的CListCtrl实现
- JavaScript实现点击可编辑
- MFC 基于CListCtrl类的可编辑列表类
- 使CListCtrl可编辑
- 可编辑的CListCtrl
- 可编辑的CListCtrl
- 使CListCtrl可编辑
- MFC可编辑CListCtrl
- CListCtrl可编辑
- MFC CListCtrl可编辑
- MFC可编辑CListCtrl
- CListCtrl 报表风格,可编辑子项的完美实现
- table点击实现可编辑文本
- 使CListCtrl可编辑(转)
- MFC CListCtrl可编辑内容
- MFC列表框实现可编辑功能
- CListCtrl实现列表项拖拽
- 微信小程序API——获取定位
- 机器学习系列--关于LR的两个问题
- 用Hexo + github搭建自己的博客 --- 再也不用羡慕别人了!
- spark rdd说明
- Java中String的内存空间分配
- 实现列表CListCtrl可点击编辑
- 7.4
- HDOJ1976 Software Version
- 关于shiro 总是302的问题
- Linux下目录结构与常用命令
- Android的购物车操作
- Hiho 1044 状态压缩dp
- Codeforces Round #452 (Div. 2) A,B,C
- java【通用】统计字符串中重复【单个】字符的次数频次并输出重复最多的次数和字符