【问题标题】:Display and use the same MFC CList control in multiple dialogs在多个对话框中显示和使用相同的 MFC CList 控件
【发布时间】:2016-09-27 20:22:08
【问题描述】:

我正在为 Windows CE 设备编写一个测试应用程序。这是我第一次为手持设备编程。我在 Visual Studio 2008 上使用 MFC VC++。我发现在控件中存在许多限制,以及在方便地运行程序与在台式计算机上运行类似程序时我可以用它们做什么。

现在,我目前正在部署我的测试程序的设备没有触摸屏,并且除了数字键盘的 0-9 键之外几乎没有额外的键。因此,我必须使用一个简单的 GUI,它使用按键来调用特定功能,如添加、编辑、删除等......它还迫使我为这些功能中的每一个使用单独的对话框,以避免不必要的鼠标光标使用。

这导致我当前的问题:我的测试应用程序的“添加”对话框将一些用户数据添加到 CListCtrl在“主”对话框中“编辑/删除”对话框允许用户从自己的CListCtrl中选择所需的数据,然后按“ENTER”键,从而删除所选数据来自“MAIN”对话框的 CListCtrl。因此,主对话框和“编辑/删除”对话框都具有具有完全相同数据的 CListCtrl。因此,不必使用 2 个单独的列表控件并使用循环在它们之间来回复制数据,有没有一种方法可以让我使用完全相同的 CListCtrl (只有一个 CListCtrl 实例存在),但将其显示在 2 个单独的对话框中?这将删除所有复制代码,并将内存中的数据量减半。

我尝试将指向 MAIN 对话框的 CListCtrl 的指针传递给“EDIT/DELETE”对话框,希望可以在那里重绘控件,但徒劳无功。我可以调用 RedrawWindow、RedrawItems 命令,但它们似乎在“编辑/删除”对话框中没有效果(我认为这是因为控件本身不存在于编辑/删除对话框中)。还有其他建议吗?

【问题讨论】:

  • 我还尝试使用从“编辑/删除”对话框中传递的指针调用 CListCtrl 创建函数。似乎正在创建 List 控件,但未反映数据,可能是因为 Create 创建了 CListCtrl 的新实例...
  • 我假设您的 EDIT/DELETE 对话框位于主对话框的顶部,因此主对话框将存在于另一个对话框的背景中。然后应该可以使用CWnd::SetParent 函数将listctrl 临时移动到另一个对话框。 “我尝试传递指针”是什么意思?
  • 主对话框被隐藏,一次只显示一个对话框。 **通过指针传递它** 我在主对话框中尝试了类似这样的代码:EditDialog myEditDialog(&M_cDataList); //M_cDataList is variable to the CListCtrl 和 EditDialog:EditDialog(CListCtrl* pListCtrl);,然后,使用此指针尝试显示列表控件。当然,我可以使用这个指针访问数据,但我无法让它显示在编辑对话框中。
  • 您是否尝试过将父级临时更改为新对话框 (SetParent()) 并将位置设置为您想要的位置 (SetWindowPos())?
  • 我会试试 SetParent。还没做。感谢卡斯滕的建议。

标签: c++ visual-studio-2008 mfc modal-dialog clistctrl


【解决方案1】:

您可以使用CWnd::SetParent 将 ListCtrl 的父级临时更改为 EDIT/DELETE 对话框,并将CWnd::SetWindowPos 的位置设置为您想要的位置。当对话框关闭时,将父级设置回主对话框。

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2011-01-20
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多