MFC 保存自定义标题列宽

Posted

技术标签:

【中文标题】MFC 保存自定义标题列宽【英文标题】:MFC Saving Custom Header Column Widths 【发布时间】:2018-12-16 03:35:48 【问题描述】:

所以我只是在学习 MFC,看看我是否想开始使用它而不是普通的 Win32 编程。我有一个 SDI MFC 应用程序设置。我对创建CTreeCtrlCHeaderCtrl 的成员有意见。我有一个CDwordArray 设置为m_ColWidths,目前在我的视图类中,但是使用MFC,它应该在文档类中,因为我想保存和恢复它以在程序退出时保持用户宽度?我猜即使它只是视图的一部分,它仍然是数据并使用GetDocument() 来引用它们?

TIA!!

【问题讨论】:

“我猜即使它只是视图的一部分,它仍然是数据并使用 GetDocument() 来引用它们”:是的,您可以这样做。另请阅读我对下面 IInspectable 答案的评论。 【参考方案1】:

应用程序状态不应存储在文档中。 CDocument(-derived) 类的用途是:

文档表示用户通常使用文件打开命令打开并使用文件保存命令保存的数据单元。

CDocument 支持标准操作,例如创建文档、加载文档和保存文档。框架使用CDocument定义的接口操作文档。

用于存储应用程序状态(例如 UI 元素的大小和可见性)的指定实体是 CWinAppEx(-derived) 实现:

CWinAppEx 处理应用程序状态,将状态保存到注册表,从注册表加载状态,[...]。

【讨论】:

嗯。 IMO 它完全取决于应用程序和文件类型。在 CDocument 中存储列宽可能有意义或没有意义。列宽可以是文档的一部分,这通常是我们在 Excel 文档中所拥有的。 @jab:您在这里混淆了不同的概念:内容和表示。 Excel 也不在其文档中存储 UI 状态。它存储单元格的大小,并且 UI 在加载文档时会根据空间要求进行调整。 Excel 不会为未明确调整大小的单元格存储视图设置(例如,更改列/行的 显示 宽度或高度时)。 我认为:就像在 Excel 中一样,单元格的大小是文档的一部分,在 OP 的应用程序中,列宽的大小可能是 文档状态 的一部分(也许您想将列的大小减小到零,但仅适用于特定文档而不是应用程序范围)。在文档中存储 CTreeCtrl 的扩展状态也可能有意义或没有意义(Visual Studio 为解决方案资源管理器执行此操作)。这实际上取决于文档的类型和应用程序的类型。 @jab:再一次,你混淆了概念。 Excel 存储诸如单元格格式之类的信息,not 信息如何查看它们(例如缩放级别)。同样,Visual Studio 不会将视图状态存储在其 solution 文档中。它将信息保存在单独的存储中,就像 MFC 使用注册表来保存应用程序状态一样。 我说的不是缩放级别,而是列宽,这显然是 .xls 状态的一部分,而不是应用程序状态。

以上是关于MFC 保存自定义标题列宽的主要内容,如果未能解决你的问题,请参考以下文章

NPOI 列宽自适应 代码示例

elementUI table列宽自适应后,列数过少,出现空白

让DataGridView的列宽自适应内容

highchart 柱状图,列宽自适应(x轴是时间的特殊情况)

C# 使用NPOI导出Excel,首行冻结,添加筛选,填充颜色,列宽自适应

POI导出excel:设置字体颜色行高自适应列宽自适应锁住单元格合并单元格...