具有许多GUI屏幕的程序的设计方法

时间:2011-03-23 15:41:13

标签: c++ visual-c++ fltk

我非常害怕自己到了不归路的地步,觉得我的项目气球膨胀太大,无法跟上我目前的方式。

简而言之:

1)有许多图形屏幕(窗口),每个屏幕都是一个在自己的.cpp中定义的类,带有随附的.h标题w / public&私人减速。

2)我正在使用FLTK GUI工具包,所以当我离开屏幕时,我在其上调用“hide()”,我假设它是垃圾收集,然后我创建一个新的实例,无论屏幕是什么

我的问题是,如果屏幕(屏幕A允许调用它)创建另一个屏幕(屏幕B),那么我必须在屏幕A中包含屏幕B的头文件,并且我在屏幕A中创建一个指向屏幕B的全局指针。 CPP。

即。屏幕A的pseuodocode

#include "screenb.h"

ScreenB* screenb_ptr; // global

...
Bunch of Code, constructors, deconstructors, etc
...

void ScreenA::exit_and_make_screen_b()
{
    ScreenA.hide();
    screenb_ptr = new ScreenB();
}

这是最好的方法吗?我觉得它很邋(和内存泄漏?)我应该有一个类似虚拟.cpp / .h的东西,它跟踪一堆外部限定的指针;特别是因为有时我必须返回/转发屏幕(即可以从多个其他屏幕跳回主菜单屏幕)。任何建议表示赞赏!

2 个答案:

答案 0 :(得分:2)

以下是一些建议:

  1. 创建一个包含所有屏幕包含的新标头文件。然后,您可以只包含这一个头文件并捕获所有其他屏幕头文件。
  2. 您可能会考虑使用屏幕管理器来保留对屏幕的所有引用。然后屏幕之间的导航将交由处理所有引用和指针的屏幕管理器。这样你就不会将屏幕连接在一起,而是通过一个共同的中介进行交谈。
  3. 例如:

    screenManager->NavigateScreen( SCREEN_USER_PROFILE );
    

    所有屏幕都可以从一个基类继承,该基类包含一个指向屏幕管理器的指针(它们通过构造函数获取或从静态单例实例中获取)。这样,您的所有屏幕都可以请求新的屏幕导航。

答案 1 :(得分:1)

BTW:我不完全确定FLTK的内存结构。隐藏屏幕可能根本不会删除内存,只是隐藏窗口的GUI表示,允许您稍后在相同的状态下再次打开它。

GUI的一个好方法是模型 - 视图 - 控制器架构,您可以根据需要使用控制器来操作GUI。

这将表现为:

WindowManager wm;

void ScreenA::exit()
{
        wm.registerExit(screenb_ptr);
        wm.actOnExit();
}

或者某些类似的东西,你的窗口的中央协调器。这允许:

  • 可插入接口
  • 更好的组织
  • 防范错误