对话框可不可以多重继承。

timepalette 2003-12-03 05:03:29
我的有一个CEasyWorkDlg类。开始是继承自CResizableDlg的。
CResizableDlg是我写的一个类,可以实现对话框中各控件根据对话框大小的自动调整。

后来,我又想在对话框的标题栏加一个类似最大最小化按钮的按钮,用于控制对话框的“总在最前”属性。我想在标题栏画这样一个按钮的工作量很大,于是我又新建了一个类叫CTopableDlg, 想在CTopableDlg里实现这部分工作。代码于是变成下面的样子:

class CResizableDlg : virtual public CDialog
{
...去掉了enum{IDD=...}的定义并且相应修改了构造函数
}

class CTopableDlg : virtual public CDialog
{
...去掉了enum{IDD=...}的定义并且相应修改了构造函数
}

class CEasywordDlg : public CResizableDlg, public CTopableDlg
{
...
}

CEasyWordDlg::CEasyWordDlg(CWnd* pParent /*=NULL*/)
: CResizableDlg(CEasyWordDlg::IDD, pParent),
CTopableDlg(CEasyWordDlg::IDD, pParent)
{
...
}

我就预感编译不过去,果然:

--------------------Configuration: EasyWord - Win32 Debug--------------------
Compiling...
EasyWordDlg.cpp
E:\timepp\program\EasyWord\EasyWordDlg.cpp(132) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(unsigned int,long)' to 'void (__thiscall CWnd::*)(unsigned int,long)'
E:\timepp\program\EasyWord\EasyWordDlg.cpp(132) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(unsigned int,long)' to 'void (__thiscall CWnd::*)(void)'
Pointers to members have different representations; cannot cast between them
E:\timepp\program\EasyWord\EasyWordDlg.cpp(133) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(void)' to 'void (__thiscall CWnd::*)(void)'
E:\timepp\program\EasyWord\EasyWordDlg.cpp(133) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(void)' to 'void (__thiscall CWnd::*)(void)'
E:\timepp\program\EasyWord\EasyWordDlg.cpp(133) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(void)' to 'void (__thiscall CCmdTarget::*)(void)'
E:\timepp\program\EasyWord\EasyWordDlg.cpp(133) : error C2440: 'initializing' : cannot convert from 'void (__thiscall CEasyWordDlg::*)(void)' to 'void (__thiscall CCmdTarget::*)(void)'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
....还有好多.......
...................
Generating Code...
Compiling...
EasyWord.cpp
Generating Code...
Error executing cl.exe.
Creating browse info file...

EasyWord.exe - 44 error(s), 0 warning(s)

其中在程序中,第132和133行:
130 BEGIN_MESSAGE_MAP(CEasyWordDlg, CResizableDlg)
131 //{{AFX_MSG_MAP(CEasyWordDlg)
132 ON_WM_SYSCOMMAND()
133 ON_WM_PAINT()
134 ON_WM_QUERYDRAGICON()

大侠们救我。是不是和第130行有关,那个CResizableDlg换成CDialog也不行.
...全文
97 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
timepalette 2003-12-03
  • 打赏
  • 举报
回复
tigerfox(风之力:=奋斗的程序员.Coding) :
我的CEasyWordDlg.cpp中已经有617行程序了。而且都不可以单独分离出去。每次我往进加代码就心疼呀。

tigerVC(Tiger.Z):
你的建议挺好的。
leon_z 2003-12-03
  • 打赏
  • 举报
回复
CEasyWordDlg::CEasyWordDlg(CWnd* pParent /*=NULL*/)
: CResizableDlg(CDialog::IDD, pParent),
CTopableDlg(CDialog::IDD, pParent),CDialog(CDialog::IDD,pParent)
leon_z 2003-12-03
  • 打赏
  • 举报
回复
CEasyWordDlg::CEasyWordDlg(CWnd* pParent /*=NULL*/)
: CResizableDlg(CEasyWordDlg::IDD, pParent),
CTopableDlg(CEasyWordDlg::IDD, pParent),CDialog(CDialog::IDD,pParent)

不好意思,我想说的是试一下这个 :)
tigerVC 2003-12-03
  • 打赏
  • 举报
回复
你只能向下一级继承,不能多重继承,也就是你可以把你的CTopableDlg继承自你的CResizeableDlg.这样你就可以了,
leon_z 2003-12-03
  • 打赏
  • 举报
回复
一下子就这么多回复呀
ddddh 2003-12-03
  • 打赏
  • 举报
回复
上面说的是MFC!!!

不要误解!!!
leon_z 2003-12-03
  • 打赏
  • 举报
回复
CEasyWordDlg::CEasyWordDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDialog::IDD, pParent)

试一下
ross33123 2003-12-03
  • 打赏
  • 举报
回复
我也 gz,不过我估计不会有解决办法。 MFC在设计的时候确实没有考虑多继承。
tigerfox 2003-12-03
  • 打赏
  • 举报
回复
一个问题:你为什么把你的程序搞得那么麻烦,都写在一个对话框不好吗?
ddddh 2003-12-03
  • 打赏
  • 举报
回复

MFC的设计就不支持多重继承!!
seilfer2000 2003-12-03
  • 打赏
  • 举报
回复
没搞懂,帮你UP
keiven 2003-12-03
  • 打赏
  • 举报
回复
gz

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧