c++ - 具有多个 GUI 屏幕的程序的设计方法

标签 c++ visual-c++ fltk

我把自己搞糊涂到无法回头的地步,觉得我的项目膨胀得太大,跟不上我目前的方式。

简而言之:

1) 有许 multimap 形屏幕(窗口),每个屏幕都是在其自己的 .cpp 中定义的一个类,并带有带有公共(public)和私有(private)减速的随附 .h header 。

2) 我正在使用 FLTK GUI 工具包,所以当我离开一个屏幕时,我会在上面调用“hide()”,我假设它会进行垃圾收集,然后我创建一个新的实例来显示要跟随的任何屏幕.

我的问题是,如果一个屏幕(我们称之为屏幕 A)创建另一个屏幕(屏幕 B),那么我必须在屏幕 A 中包含屏幕 B 的头文件,并且我在屏幕 A 中创建一个指向屏幕 B 的全局指针。

即。屏幕 A 的伪代码

#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 的东西来跟踪一堆 extern-qualified 指针;特别是有时我必须返回/前进屏幕(即可以从多个其他屏幕跳回到主菜单屏幕)。任何建议表示赞赏!

最佳答案

这里有一些建议:

  1. 创建一个包含所有屏幕内容的新头文件。然后您可以只包含这个头文件并捕获所有其他屏幕头文件。
  2. 您可以考虑使用一个屏幕管理器来保存对您屏幕的所有引用。屏幕之间的导航然后留给处理所有引用和指针的屏幕管理器。这样您就不会将屏幕耦合在一起,而是通过一个共同的调解器进行对话。

例如:

screenManager->NavigateScreen( SCREEN_USER_PROFILE );

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

关于c++ - 具有多个 GUI 屏幕的程序的设计方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407809/

相关文章:

c++ - 如何获取指向函数第一个参数的指针?

java - 共享库编译,但有 undefined symbol

c++ - FLTK 事件映射/多线程

c++ - 回调函数中的接口(interface)类导致崩溃

linux - 如何在 FLTK 中编写面板任务栏以在 Linux 系统上使用

c++ - 当我不输出变量时代码中断;当我这样做的时候工作。什么?

c++ - 我应该把这个方法放在哪个类中? C++

c - _aenvptr 和 _wenvptr 的重复定义

c - 如何从程序返回进度值

visual-c++ - VC++ 2010 包含/lib 路径