双击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可点击编辑相关推荐

  1. phpcms列表页调用 点击量

    很多朋友经常问Phpcms v9的首页.列表页.内容页点击量如何调用.现在就给大家分享phpcms V9如何分别在首页.列表页.内容页调用点击量代码: 1. Phpcms v9首页调用点击量 {pc: ...

  2. 页面中php传值后循环列表js获取点击的id

    页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...

  3. vue+element-ui 实现table单元格点击编辑,并且按上下左右键单元格之间切换

    通过我的测试我发现两个两种方法来编辑单元格的内容 第一种点击编辑: 我是给td里添加一个input,将值赋值给input,当失去焦点的时候将input的值付给td原来的内容,然后将input删除, 代 ...

  4. 点击编辑table变为可编辑状态

    简单描述:开发中遇到一个小困难,table展示的数据,需要是可编辑的,点击编辑按钮,页面table可以进行编辑,编辑完成后,点击保存数据就保留下来~~~ 思路:用一个带有input的表去替换不带inp ...

  5. iview 下拉select样式_iview的select组件的列表样式和点击都无效

    iview的select组件用按需引入的方式加载这个组件之后列表样式和点击都无效,但是在main.js全局引入iview之后再用这个select组件又没有这个问题,main.js里面只引入了样式文件, ...

  6. JS点击编辑内容并保存

    一个标签,点击按钮使内容变成可编辑状态,然后使用保存数据.这个是点击编辑按钮使得标签内容替换为文本域来实现的.

  7. 省市区联动,解决点击编辑赋值问题

    HTML代码,这个很简单,就是三个seect标签,另外用bootstrap美化了一下. <div class="form-group"><label class= ...

  8. ListView中利用另一方法AdapterView.setOnItemClickListener来设置列表项的点击事件监听器

    对比之间在自定义适配器中设置列表项点击事件监听器的方法, 这里说明第二种方法, 这种办法相对更好,更省内存资源 同是Miwok项目, 举个例子, 在NumbersActivity中可以用一种方法设置列 ...

  9. vue评论点赞列表点赞,点击哪个哪个状态改变

    vue评论点赞列表点赞,点击哪个哪个状态改变 后台数据如下: { "body":{ "host":null, "code":200, &qu ...

  10. html编辑点击取消复原,vue点击编辑按钮,内容变成input可以修改,也可以删除

    一.效果 图1 图2,点击报错之后,又变成图1的效果 二.使用到了element UI中的以下组件: 三.使用的关键点是vue中的v-if指令 四.关键代码如下 HTML部分 添加街道 编辑 保存 @ ...

最新文章

  1. 哪个工具编译java_用什么工具来编译JAVA啊?
  2. java httpinvoker漏洞_Java反序列化漏洞学习
  3. Python中*args和**kwargs
  4. linux man命令的1和1p,Linux中man命令的使用方法再解释
  5. ubuntu18.10下面从视频中提取音频
  6. python dataframe 列赋值_dataframe根据新列特征的条件为其赋值,给
  7. linux page cache 大小,Linux内核学习笔记(八)Page Cache与Page回写
  8. 【转载】完全手册 Flex 3.0 RIA开发详解(光盘内容)(书下载以及书的源代码下载)...
  9. No.2小白的HTML+CSS心得篇
  10. pytorch-sequencelabeling是一个支持softmax、crf、span等模型,注于序列标注(命名实体识别、词性标注、中文分词)的轻量级自然语言处理工具包,包含数据与实验
  11. vb.net 教程 2-13 Windows API 函数
  12. 主流的web前端开发及调试工具
  13. PTA-航空公司VIP客户查询
  14. STM32F103ZET6+IIC+SHT20温湿度传感
  15. win7休眠不断网的设置方法
  16. 学术文献也有身份证?
  17. html页面怎么适配拼接的大屏,大屏上的全屏页面的自适应适配方案
  18. Node.js文档和教程
  19. FPGA-RAM读写测试
  20. ajax(java)

热门文章

  1. Linux系统启动简单流程:
  2. int.Parse(),int.TryParse(),Convert.ToInt32(), (int)转换为数字类型方法简介
  3. 智能图形开发板SmartGLCD
  4. JavaWeb初级篇-HttpPost使用教程
  5. Spring Boot入门篇-@RequestParam/@RequestBody配置
  6. 程序员如何保护好自己的发际线
  7. sql两张表,分组或row_number()取最新的记录SQL
  8. Git用命令提交代码并合并
  9. PHP正则匹配html标签
  10. JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)