1

虽然我使用的是 MFC,但我相信这主要是一个 C++ 问题。

我从中CResizingDialog派生出CDialog哪个是应用程序中所有对话框的基类。它使他们能够根据目标屏幕大小自动(您猜对了)调整大小。CResizingDialog 通过覆盖 CDialog 的几个虚函数来实现这一点,包括OnSize()OnInitDialog()OnPaint()。到目前为止很好。

现在我正在添加一个属性表/页面,它也需要相同的调整大小功能,但是我不能使用 CResizingDialog 作为我的属性页的基类。这意味着我将需要一个新的基类,比如派生自CPropertyPage它的 CResizingPage,它将包含与 CResizingDialog 相同的功能。

然而,调整对话框及其控件大小的代码是完全相同的。有没有办法以某种方式重用 CResizingDialog ?我从未使用过多重继承,这有帮助吗?

4

1 回答 1

2

我有 2 条建议如何解决这个问题,你必须决定哪个更容易/更适合你的情况。

如果可能的话,您可以将调整大小的代码移动到具有适当参数的独立函数中,您可以从 2 个虚拟函数中调用这些参数。

另一种方法是使基类成为模板。像这样的东西:

template< typename Base >
CResizingBase
    : public Base
{
    // override the appropriate functions here
};

class CResizingDialog
    : public CResizingBase< CDialog >
{
};

class CResizingPage
    : public CResizingBase< CPropertyPage >
{
};
于 2013-08-28T21:21:18.927 回答