在MFC中管理类似控件行的数据的最佳方法是什么?

在MFC中管理类似控件行的数据的最佳方法是什么?,mfc,Mfc,我想创建一个对话框,允许用户为一个对象的多个实例设置相同的属性。比如: 有人建议我为行创建一个无标题、无模式的对话框,然后多次实例化它,并为row类维护一个对象数组。我试着让自己半途而废,但并不完全成功。看来我的问题可能被剪短了。我现在有了一些有用的东西: BOOL CPropPageDI::OnInitDialog() { CPropertyPage::OnInitDialog(); CRowDI* row = new CRowDI(); CRect rect;

我想创建一个对话框,允许用户为一个对象的多个实例设置相同的属性。比如:

有人建议我为行创建一个无标题、无模式的对话框,然后多次实例化它,并为row类维护一个对象数组。我试着让自己半途而废,但并不完全成功。看来我的问题可能被剪短了。我现在有了一些有用的东西:

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);

我看到了属性页,但它似乎是空的。我还需要做些什么才能显示该行吗?

如果每一行都是子对话框,那么控件数组和控件ID的问题就会消失。您只需编写一个“东西”的代码,然后管理一组“东西”


在这种情况下,子对话框将是一个标题栏样式已关闭的无模式对话框,因此视觉效果将与示例相同

设计问题:为什么不在报表样式中使用CListCtrl?创建一个CWnd派生类,该类是控件组的容器。顺便问一下,你需要使用MFC吗?我已经移动到QT,而且在这些中做起来更容易,而C++,.rRiver,MFC是旧的,我对它很陌生。我不确定CListCtrl是什么。我来看看。@sashoalm,我正在维护/增强一个用MFC构建的旧应用程序。我没有工具可供选择。如果您需要报表样式的列表控件无法处理的事情,最好从Chris Maunder的开始。直接从CWnd派生而不是从CDialog派生不是更好吗?这听起来很有希望。我可以用资源编辑器/工具箱将对话框添加到对话框中,还是必须用代码来完成?子对话框可以在资源编辑器中独立构建,但必须在代码中创建和定位(在父对话框的OnInitDialog中)。谢谢,Scott。鉴于我是一名MFC新手,您能告诉我用于此操作的方法的名称吗?可以使用MoveWindow调整无模式对话框的大小和位置。在父对话框上放置一个不可见的静态控件可以很方便地用作第一个无模式对话框放置位置的地标。静态控件+ScreenToClient上的GetWindowRect将为您提供在MoveWindow中使用的位置。然后向下偏移矩形并放置第二个无模式对话框。。。