当前位置: 首页 > news >正文

MFC UI表格制作从专家到入门

文章目录

  • CListCtrl
    • 常见问题
  • 增强版CGridCtrl(第三方)
  • 第三方库
    • ReoGrid

CListCtrl

默认情况下,CListCtrl不支持直接编辑单元格,需通过消息处理实现:
1.添加控件到资源视图
在对话框资源编辑器中拖入List Control控件,设置ID(如IDC_LIST1),样式选择Report

2.初始化表格样式与列头
在对话框的OnInitDialog()中初始化控件:

m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);  // 启用整行选择和网格线
m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);  // 添加列
m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_CENTER, 50);
m_listCtrl.InsertItem(0, _T("张三"));         // 插入行
m_listCtrl.SetItemText(0, 1, _T("25"));       // 设置单元格文本

3.实现双击编辑功能
处理NM_DBLCLK消息,创建编辑控件(如CEdit):

void CMyDialog::OnNMDblclkList(NMHDR* pNMHDR, LRESULT* pResult) {LPNMITEMACTIVATE pNMIA = (LPNMITEMACTIVATE)pNMHDR;int nItem = pNMIA->iItem;  // 获取行索引int nSubItem = pNMIA->iSubItem;  // 获取列索引// 创建编辑框并定位到单元格位置CEdit* pEdit = new CEdit();pEdit->Create(WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, rect, this, IDC_EDIT);pEdit->SetFocus();
}

编辑完成后,需处理EN_KILLFOCUS消息保存数据并销毁编辑框。

常见问题

1.焦点管理
编辑控件需正确处理焦点丢失事件,避免内存泄漏(如动态创建的CEdit需在EN_KILLFOCUS中销毁)。

2.性能优化
大数据量时启用虚拟模式(LVS_OWNERDATA),按需加载数据。

4.数据验证
LVN_ENDLABELEDIT消息中校验输入格式(如数字、日期)。

增强版CGridCtrl(第三方)

支持直接编辑。内置支持文本框、下拉框、日期选择器等编辑器,无需手动处理消息。

1.集成控件到项目
下载CGridCtrl源码,将头文件和实现文件加入项目。

2.在对话框中添加控件

// .h
CGridCtrl m_grid;// .cpp
m_grid.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(10,10,400,200), this, IDC_GRID);
m_grid.SetRowCount(10);     // 设置行数
m_grid.SetColumnCount(3);   // 设置列数
m_grid.SetItemText(0, 0, _T("数据"));  // 填充单元格

第三方库

ReoGrid

适用于需要Excel级功能的场景。支持公式计算、样式定制等高级功能。

http://www.lryc.cn/news/587589.html

相关文章:

  • LeetCode经典题解:206、两数之和(Two Sum)
  • 018 进程控制 —— 进程等待
  • 算法训练营day18 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • B站自动回复工具(破解)
  • 项目一第一天
  • 苍穹外卖学习指南(java的一个项目)(老师能运行,但你不行,看这里!!)
  • priority_queue的使用和模拟实现以及仿函数
  • 《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
  • MFC/C++语言怎么比较CString类型最后一个字符
  • 【Linux】Ubuntu22.04安装zabbix
  • HTTP 四种常见方法
  • 【论文阅读】Thinkless: LLM Learns When to Think
  • ubuntu(22.04)系统上安装 MuJoCo
  • MFC UI控件CheckBox从专家到小白
  • 桶排序算法深度剖析
  • FastAPI + gRPC 全栈实践:Windows 开发到 Ubuntu 部署全指南
  • flink 和 spark 架构的对比
  • idea删除的文件怎么找回
  • IDEA中使用Servlet,tomcat输出中文乱码
  • JMeter 连接与配置 ClickHouse 数据库
  • 递推预处理floor(log_2{n})
  • 【脚本系列】如何使用 Python 脚本对同一文件夹中表头相同的 Excel 文件进行合并
  • uniapp video视频全屏播放后退出,页面字体变大,样式混乱问题
  • 基于Spring Boot的生活用品电商网站的设计与实现
  • 国内隧道IP代理技术解析:原理、优势与实战应用
  • 算法学习笔记:21.动态规划——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • linux 文件搜索与文件内容查看
  • Imx6ull用网线与电脑连接
  • 游戏玩法的专利博弈
  • 11、鸿蒙Harmony Next开发:列表布局 (List)