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

C++ 在多个对话框中显示并使用相同的MFC CList控件,c++,visual-studio-2008,mfc,modal-dialog,clistctrl,C++,Visual Studio 2008,Mfc,Modal Dialog,Clistctrl,我正在为windows CE设备编写测试应用程序。这是我第一次为手持设备编程。我在VisualStudio2008上使用MFC VC++。我发现控件中有很多限制,在手持电脑上运行程序时,与在台式电脑上运行类似程序时相比,我可以用它们做些什么 现在,我当前正在部署测试程序的设备没有触摸屏,除了numberpad 0-9键之外,几乎没有其他键。所以,我必须使用一个简单的GUI,它使用按键来调用特定的函数,如添加、编辑、删除等。。。它还迫使我为每个函数使用单独的对话框,以避免不必要的鼠标光标使用 这就

我正在为windows CE设备编写测试应用程序。这是我第一次为手持设备编程。我在VisualStudio2008上使用MFC VC++。我发现控件中有很多限制,在手持电脑上运行程序时,与在台式电脑上运行类似程序时相比,我可以用它们做些什么

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

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


我试图将一个指向主对话框CListCtrl的指针传递到“编辑/删除”对话框,希望在那里重新绘制控件,但没有成功。我可以调用RedrawWindow、RedrawItems命令,但它们在“编辑/删除”对话框中似乎没有效果(我认为这是因为编辑/删除对话框中不存在控件本身)。任何其他建议?

您可以使用
CWnd::SetParent
将ListCtrl的父项临时更改为编辑/删除对话框,并使用
CWnd::SetWindowPos
将其位置设置为您想要的位置。当对话框关闭时,将父项设置回主对话框。

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

我还尝试使用“编辑/删除”对话框中传递的指针调用CListCtrl创建函数。似乎正在创建列表控件,但数据没有反映出来,可能是因为创建创建了CListCtrl的新实例……我假设您的编辑/删除对话框位于主对话框的顶部,因此主对话框将存在于另一个对话框的背景中。然后,应该可以使用
CWnd::SetParent
函数将listctrl临时移动到另一个对话框。“我试图传递指针”是什么意思?主对话框被隐藏,一次只显示一个对话框**通过指针传递它**我在主对话框中尝试了类似以下代码:
EditDialog myEditDialog(&M\U CDATA列表)//M\u CDATA列表对于CListCtrl和EditDialog是可变的:
EditDialog(CListCtrl*pListCtrl)SetParent()
)并将其位置设置为您想要的位置(
SetWindowPos()
)?我将尝试SetParent。我还没做呢。谢谢您的建议,Karsten。我还尝试使用“编辑/删除”对话框中传递的指针调用CListCtrl创建函数。似乎正在创建列表控件,但数据没有反映出来,可能是因为创建创建了CListCtrl的新实例……我假设您的编辑/删除对话框位于主对话框的顶部,因此主对话框将存在于另一个对话框的背景中。然后,应该可以使用
CWnd::SetParent
函数将listctrl临时移动到另一个对话框。“我试图传递指针”是什么意思?主对话框被隐藏,一次只显示一个对话框**通过指针传递它**我在主对话框中尝试了类似以下代码:
EditDialog myEditDialog(&M\U CDATA列表)//M\u CDATA列表对于CListCtrl和EditDialog是可变的:
EditDialog(CListCtrl*pListCtrl)SetParent()
)并将其位置设置为您想要的位置(
SetWindowPos()
)?我将尝试SetParent。我还没做呢。谢谢你的建议,卡斯滕。