在多个对话框中显示和使用相同的 MFC CList 控件

Display and use the same MFC CList control in multiple dialogs

我正在为 windows CE 设备编写测试应用程序。这是我第一次为手持设备编程。我在 Visual Studio 2008 上使用 MFC VC++。我发现控件有很多限制,当 运行 将程序放在手边时我可以用它们做什么我 运行 在台式电脑上有一个类似的程序。

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

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

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

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