如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)
Posted
技术标签:
【中文标题】如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)【英文标题】:How to create dynamically changing dialog box visual studio 2010 (mfc) based on user input 【发布时间】:2013-12-07 22:00:05 【问题描述】:我浏览了整个互联网,但似乎仍然无法找到这个问题的答案。我正在使用 Visual C++ (2010),我想知道如何创建一个根据用户输入更改的对话框(MFC,基于对话框的程序)。例如,假设我在对话框上有两个单选按钮 - 一个用于圆形,一个用于矩形。如果用户单击矩形,我想要在同一个对话框上显示“长度”的静态文本,然后是一个编辑控件供用户放置长度。现在,如果用户单击圆圈,我想要在同一个对话框上显示“半径”的静态文本,以及用户放置半径的编辑控件。因此,根据用户单击的形状,同一对话框中会出现不同的选项。此外,当使用他们的向导在对话框上添加静态文本或编辑控件或其他任何内容时,我似乎无法找到在 cpp 文件中实现该代码的位置。任何帮助将不胜感激如何实现这一点。谢谢!
编辑:另一个可行的方法是如果半径和长度都显示在对话框上,但是,例如,如果用户单击圆形,则用户无法输入长度编辑控件,并且可以仅在半径编辑控件中键入。谢谢
【问题讨论】:
如果没有类向导就无法编写代码,请不要使用类向导。如果您无法手动编写资源脚本,请不要使用资源编辑器。事情将没有意义。至于你的问题:CWnd::SetWindowText
.
【参考方案1】:
更简单的方法:使用所有需要的控件设计您的对话框,设置 WS_VISIBLE 样式not,并在需要时显示/隐藏它们。
【讨论】:
这是一个可能的解决方案。它在控件反映其他选项的情况下效果更好。当实现在对话框中占据相同区域的互斥控件时,它不太可行。它使资源编辑器无用,除非控件被动态重新定位,因此可以任意放置在对话框资源中。 @IInspectable,对于重叠场景,我创建了对话框的多个副本,其中不同的控件位于正确的非独占位置,然后使用源编辑器组合成一个对话框。有点痛苦,但可行,并且可以很好地维护和更新。【参考方案2】:当用户单击时,您可以更改静态控件上的文本。在设计模式中,将静态控件的 ID 更改为唯一的 ID,例如 IDC_STATIC_SHAPE。在静态控件上调用 SetWindowText 将更改其文本。
向对话框添加控件不会在 cpp 文件中生成任何代码。它将代码添加到 *.rc 文件中,该文件是由资源编译器编译并添加到程序的资源部分的文本文件。
【讨论】:
以上是关于如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 代码中快速查找项目中的文件或符号?
如何在 Access 2007 中使用 Visual Basic 代码更新单元格