自定义GUI对象

时间:2011-03-22 20:32:03

标签: c++ user-interface visual-c++ architecture

在C ++程序中我有图表,我想添加一些对象。例如,那些可以是常见的“独立”对象,如文本,行等,或者更多不同类型的“智能”对象,它们的行为不同,可以连接到外部模型以读取/写入其状态。

我想到的最简单的事情是使用虚拟函数(如Draw()等)创建所有对象的公共接口,但对象可能本质上不同(就像文本框和滚动条不同,因此有一个不同的界面)。另一方面,如果我不创建公共接口,我将需要调度对象类型,这通常被认为是C ++中的不良实践。

所有这一切都应该保持简单,例如创建小部件和自定义消息队列将是一种矫枉过正,但我​​希望能够轻松支持/扩展。

我知道GUI有很多模式,比如MVC,MVP等,但是这些模式很一般而且我有点迷失,所以如果你能给我一些指示(或者更好,一个引用来激励你)这会有所帮助!感谢。

2 个答案:

答案 0 :(得分:1)

为了灵活性和可伸缩性,您可以使用接口而不是单个基类。例如,扩展可以从IDraw界面绘制的所有对象。如果可以更新对象,则添加并实现IControl接口等。这可能首先看作是开销,但为您提供了良好的可扩展性。

编辑:

void* Class::GetInterface(const int id)
{
    if (IDraw::GetId() == id)
    {
        return (IDraw*)this;
    }
    else if (IControl::GetId() == id)
    {
        return (IControl*)this;
    }

    return NULL;
}

答案 1 :(得分:1)

一种可能性是使用多重继承。定义一个drawable基类,它只定义足以绘制一个可见对象,并要求所有可绘制对象从中派生。他们可能(通常会)从其他基类派生,定义他们支持的其他接口;只需确保在需要时可以绘制每个项目。