语言:C++

开发环境:Microsoft Visual C++

已使用的库:MFC

问题:我创建了一个首选项配置应用程序。左边是一个列表框,其中可以更改设置的“父级”类别,单击它们时,可以更改的设置显示在列表框的右侧,就像在许多大型首选项对话框中一样。我已使用DDX数据交换设置了所有控件(请注意:我为EACH子对话框/首选项页面具有一个cpp文件),因此已设置了所有基础。

这是我的问题。我在使用UpdateData时遇到了麻烦,因为我从未真正在首选项框上调用DoModal(),因为它们是父对话框容器的子级,并且它们仅绑定(bind)到对话框中的图片控件。当用户单击列表框时,我将设置焦点和显示/隐藏子对话框组合在一起。

当用户选择“保存这些”时,他/她将看到另一个对话框,该对话框使他们可以检查要保存(生成XML配置文件)的特定首选项 Pane 。显然,我需要抓取对话框以获取其输入,但是当程序到达代码中调用UpdateData的位置时,程序将失败,因为我在调用DoModal()之前先调用UpdateData。

现在我不太确定如何获取这些值。我是MFC的新手,这也无济于事。就是这样。无论如何,我会很感激任何人都可以提供的帮助。

最佳答案

使用CTabCtrl可能会改善用户体验,它提供了您似乎正在实现的功能。

通常,在大多数情况下,您无意直接调用UpdateData,这是一种由OnInitDialog调用的框架机制,而对于模式对话框则由OnOK调用。这并不是您可能正在考虑的那样进行加载和保存。它的作用是从资源或成员变量中的OnInitDialog中加载控件值,然后在用户单击“确定”时,它将对话框上的控件值验证并保存到成员变量中。通过这种机制,您可以在重新打开对话框时显示先前的值,以及在对话框关闭后将其取出。

您可以研究CArchive并序列化对话框,但是我建议您编写自己的保存/加载框架,尤其是在处理XML配置文件时。

09-07 11:10