首页 > 其他分享 >实现MFC中CListCtrl双击单元格获取文本

实现MFC中CListCtrl双击单元格获取文本

时间:2023-12-25 15:55:59浏览次数:24  
标签:控件 MFC CListCtrl edit CEdit pNMItemActivate WS 设置 双击

1.在类中定义CEdit控件

CEdit* m_edit;

2.窗口OnInitDialog创建窗口并设置父窗口为CListCtrl,设置字体

    m_edit = new CEdit();
    m_edit->Create(ES_LEFT | WS_CHILD | WS_TABSTOP | WS_BORDER,
        CRect(10, 10, 100, 100), &m_lstRecord, 1);
    m_edit->SetFont(GetFont());

设置父窗口非常关键,因为下一步Edit需要MoveWindow,而列表控件GetSubItemRect返回的区域是以列表控件左上角为(0,0)点,因此在此处设置之后,后面MoveWindow将不需要再次对Edit控件进行坐标转换。

3.响应列表控件NM_DBLCLK消息

void CXXXDlg::OnNMDblclkListRecord(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    if (pNMItemActivate->iItem != -1)
    {
        // TODO: 在此添加控件通知处理程序代码
        CRect rect;
        if (m_lstRecord.GetSubItemRect(pNMItemActivate->iItem, pNMItemActivate->iSubItem, LVIR_LABEL, rect))
        {
            m_edit->MoveWindow(rect);
            m_edit->ShowWindow(SW_NORMAL);
            m_edit->SetWindowText(m_lstRecord.GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem));
            m_edit->SetSel(0, -1);//全选编辑框的内容。
            m_edit->ShowCaret();//显示光标
            m_edit->SetFocus();//设置输入焦点在编辑框上
        }
    }

    *pResult = 0;
}

4.响应CEdit控件ON_EN_KILLFOCUS(失焦)消息

void CXXXDlg::OnEnKillfocusEditText()
{
    // TODO: 在此添加控件通知处理程序代码
    m_edit->ShowWindow(SW_HIDE);
}

如果需要对单元格进行编辑,则在第3步将行、列记录在成员变量里,在第4步获取编辑框文本后,根据行、列设置回列表控件。

 

示例:

 

参考:

【1】https://blog.csdn.net/xiangzi890721/article/details/103809268

【2】https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cedit-class?view=msvc-170

标签:控件,MFC,CListCtrl,edit,CEdit,pNMItemActivate,WS,设置,双击
From: https://www.cnblogs.com/kuaixue/p/17926265.html

相关文章

  • MFC---路径格式化
    在路径字符串格式化时,通常需要使用双反斜杠\而不是单斜杠//。在文件路径中,Windows系统通常使用反斜杠\作为路径分隔符。问题出现问题原因问题解决......
  • 巧妙使用Vue.extend继承组件实现el-table双击可编辑(不使用v-if和v-else)
    问题描述有一个简单的表格,产品要求实现双击可编辑看了一下网上的帖子,大多数都是搞两部分dom,一块是输入框,用于编辑状态填写;另一块是普通标签,用于在不编辑显示状态下呈现单元格文字内容。再加上一个flag标识搭配v-if和v-else去控制编辑状态、还是显示状态。大致代码如下:<el-t......
  • 如何实现双击文本消息放大
    如何实现双击文本消息放大1、需要先创建一个RCTextMessageCell的category。添加一个代理@property(nonatomic,weak)iddelegate和其代理方法(void)doubleTapTextMessage:(RCMessageModel*)model;2、在category中重写-(void)initialize方法,添加手势。并将代理抛出去。3......
  • mfc中tabsheet
    //TabSheet.cpp:implementationfile//#include"stdafx.h"#include"pch.h"//#include"Property5.h"#include"TabSheet.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;......
  • luckysheet 双击单元格 浮动单元格错位问题
    U1S1用luckysheet久了真的会很不幸。  问题描述(部分文字已经擦掉了):弹窗下会sheet出现双击显示异常的情况,如果只是文本框还好,解决不了还能凑合用用,直到今天我发现复制日期后,直接双击会自动带个date-picker,然后这个东西也错位,我真的是艹了。最关键是这个东西不在已经支持的......
  • MFC CStatic 里面加载图片
    ▲效果头文件新增空间指针:private:CStatic*pBMP;BOOLCMFCApplicationBMPDlg::OnInitDialog()里面初始化://TODO:在此添加额外的初始化代码//初始化字段pBMP=(CStatic*)GetDlgItem(IDC_STATIC_BMP);//除了添加控件,还有这种方式获得控件的方式。pBMP->ModifyStyl......
  • MFC CListVtrl 控件简单测试
    ▲样式Demo关联控件变量m_CList,在属性中将视图(View)设置成Report(报表)模式。在BOOLCMFCApplication4LlisBoxDlg::OnInitDialog()初始化函数中添加测试代码://TODO:在此添加额外的初始化代码//m_CList.SetView(1);//视图View要改成Report报表模式//设置风格样式//......
  • 电脑上软件双击打开没反应
    今天遇到一个很少见的问题,双击电脑上快捷方式没有反应。一般都会有个提示,根据提示判断问题。去安装路径下尝试打开也没用,判断不是快捷方式的原因。管理员权限打开也没用,杀毒软件退出也没用,也不是权限的问题。连接的官网也可以打开,不是网络原因。几个常见的原因也被排除了。最......
  • 无涯教程-MFC - List Control函数
    列表视图控件的功能,该控件显示项目的集合,每个项目由一个图标和一个标签组成,它由CListCtrl类表示,列表控件包括使用以下视图显示项目列表。IconsSmallIconsListReport让无涯教程通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例。步骤1-删除TODO行并拖动一......
  • 无涯教程-MFC - Tree Control函数
    TreeViewControl是一个窗口,其中显示项目的层次结构列表,例如文档中的标题,索引中的条目或磁盘上的文件和目录,每个项目都包含一个标签和一个可选的位图图像,并且每个项目都可以具有与其相关联的子项目列表,通过单击一个项目,用户可以展开和折叠子项目的关联列表,它由CTreeCtrl类表......