我正在考虑重写我十多年前写的MFC Dialog应用程序。我最初选择了Dialog应用程序类型,因为通常用户单击控制输入,应用程序通过USB从硬件提供实时数据,并在编辑框中显示数据。该应用程序还将信息写入文件。由于用户从不进行任何文件编辑,因此我不认为需要SDI或MDI应用程序类型。
我现在已经了解到SDI应用程序类型以及CFormView提供了一些有趣的优势,例如滚动,窗口大小调整: http://forums.codeguru.com/showthread.php?267664-MFC-Dialog-How-to-enhance-a-dialog-based-application-with-Menu-Toolbar
我重写的原因是我的应用程序无法维护,并且无法很好地扩展。最初我为每种类型的“屏幕”创建了一个CDialog,但我在各种屏幕中都有很多代码。事实上,随着时间的推移,我开始重用CDialog类,并且使用状态变量只需隐藏,重命名或重新定位许多控件,以使屏幕在应用程序的上下文中看起来合适。
我尝试从公共基类派生CDialog类,但我没有以这种方式实现伟大的代码重用。我还发现我有一些共同的资源,我不断地转移到各种窗口,这只会增加不必要的开销。
随着应用程序的发展,跟踪应用程序的状态变得很困难(用于处理USB硬件数据输入,用户输入,按钮启用等)。使用分层状态图作为我的应用程序的基础可能会清理它。
我是否应该考虑在一个CFormView上设置所有必要控件的超集,并从一开始就隐藏,重命名和重新定位控件,并使用状态图来管理它?
我看到的所有示例都将代码直接放在输入控件处理程序中,但也许我应该使用处理程序来更改状态,然后让状态机做出决策以减少意大利面条代码。
所以我的主要问题是:
1.如果用户不进行编辑,SDI会不会给我买任何用于写和读文件(如报告和记录)的东西?
2. CFormView是否有意义?
3.将所有控件放在一个CFormView而不是多个类和Dialog资源上是否有意义?
4.您是否尝试在MFC中使用状态机,例如Boost Statechart或Miro Samek的Quantum Leaps?
http://www.boost.org/doc/libs/1_58_0/libs/statechart/doc/index.html
http://www.state-machine.com/products/index.html