在 MFC 中管理类似控件行的数据的最佳方法是啥?
Posted
技术标签:
【中文标题】在 MFC 中管理类似控件行的数据的最佳方法是啥?【英文标题】:What is the best way to manage data for rows of similar controls in MFC?在 MFC 中管理类似控件行的数据的最佳方法是什么? 【发布时间】:2015-03-06 16:26:33 【问题描述】:我想创建一个对话框,允许用户为对象的多个实例设置相同的属性。比如:
有人建议我为行创建一个无标题、无模式的对话框,然后多次实例化它,并为行类维护一个数组。我试过我到了那里,但不完全。看来我的问题可能是剪辑。我现在有一些工作:
BOOL CPropPageDI::OnInitDialog()
CPropertyPage::OnInitDialog();
CRowDI* row = new CRowDI();
CRect rect;
CWnd* pos = GetDlgItem(IDC_POS_DI);
pos->GetWindowRect(&rect);
// Make sure that the row fits
rect.right = rect.left + 492;
rect.bottom = rect.top + 55;
ScreenToClient(&rect);
row->Create(IDD_ROW_DI, this);
row->MoveWindow(&rect);
row->ShowWindow(SW_SHOW);
我看到了属性页,但它似乎是空的。我还需要做些什么来显示该行吗?
【问题讨论】:
设计问题:有什么理由不在报告样式中使用 CListCtrl? 创建一个 CWnd 派生类,它是控件组的容器。顺便说一句,您需要使用 MFC 吗?我已经迁移到 Qt,在其中做这些事情要容易得多,而且仍然是 C++。 @rrirower,虽然 MFC 很老,但我是新手。我不确定 CListCtrl 是什么。我去看看。 @sashoalm,我正在维护/增强使用 MFC 构建的旧应用程序。我别无选择。 如果您需要报表样式的列表控件无法处理的事情,一个好的起点可能是 Chris Maunder 的MFC Grid Control。 【参考方案1】:如果每一行都是一个子对话框,那么控件数组和控件 ID 的问题就会消失。您只需编写一个“事物”的代码,然后管理一组“事物”。
在这种情况下,子对话框将是关闭了标题栏样式的无模式对话框,因此视觉结果将与您的示例相同。
【讨论】:
直接从CWnd而不是CDialog派生不是更好吗? 这听起来很有希望。我可以使用资源编辑器/工具箱将对话框添加到对话框中,还是必须在代码中完成? 子对话框可以在资源编辑器中独立构建,但必须在代码中创建和定位(在父对话框的 OnInitDialog 中)。 谢谢,斯科特。鉴于我是 MFC 新手,您能告诉我我将使用的方法名称吗? 可以使用 MoveWindow 调整无模式对话框的大小和位置。在父对话框上放置一个不可见的静态控件作为您希望放置第一个无模式对话框的位置的标志很方便。静态控件 + ScreenToClient 上的 GetWindowRect 将为您提供在 MoveWindow 中使用的位置。然后将矩形向下偏移并放置第二个无模式对话框...以上是关于在 MFC 中管理类似控件行的数据的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Datatables 在 Laravel 中处理大量行的最佳方法是啥?