繼承一個你自己的對話框,結果會如何?

rokia 2002-08-29 09:01:28

做了一個對話框,有一些按鈕,對應有一些消息處理函數。

這時,再從該對話框類中派生一個新類,再任何代碼都不加的情況下。

這個新對話框表現會怎麼樣?

界面中的按鈕現在還能處理嗎?會出現其它什麼亂七八糟不可理解的事情嗎?

消息的轉發如何進行?就是說,當你點過一個按鈕以後會怎麼樣?因為新類中並沒有處理這個消息,那麼這個消息會傳給父類嗎?
...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rokia 2002-09-19
  • 打赏
  • 举报
回复
对不起,好长时间没看了,once168说得对! 茅塞顿开!!
激动!:)
rokia 2002-09-03
  • 打赏
  • 举报
回复
基類的映射表:
BEGIN_MESSAGE_MAP(CRipDlg, CDialog)
//{{AFX_MSG_MAP(CRipDlg)
ON_WM_LBUTTONDBLCLK()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_STOPRIP, OnStoprip)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_PAUSE, OnPause)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
子類的映射表(空的):
BEGIN_MESSAGE_MAP(CDlg2, CDialog)
//{{AFX_MSG_MAP(CDlg2)
// NOTE: the ClassWizard will add message map macros here

//}}AFX_MSG_MAP
END_MESSAGE_MAP()


在子類DoModal出現的窗口(它用了和基類一樣的對話框模板),點按鈕或按鼠標都沒有反應。按理說,鼠標雙擊事件不應該傳到基類去嗎??
once168 2002-09-03
  • 打赏
  • 举报
回复
//BEGIN_MESSAGE_MAP(CDlg2, CDialog)//这名写错了,你将消息直接传给CDialog基类,所以你写的函数不起作用(你自已展开一下宏就知道是什么回事了)
BEGIN_MESSAGE_MAP(CDlg2, CRipDlg)//
//{{AFX_MSG_MAP(CDlg2)
// NOTE: the ClassWizard will add message map macros here

//}}AFX_MSG_MAP
END_MESSAGE_MAP()
once168 2002-08-31
  • 打赏
  • 举报
回复
你的消息是映射处发出来看一下好吗?
rokia 2002-08-30
  • 打赏
  • 举报
回复
我知道重載是可以的,可是我本來以為不需要重載的啊,
jason_sun22 2002-08-30
  • 打赏
  • 举报
回复
重载
rokia 2002-08-30
  • 打赏
  • 举报
回复
once168(once168) :可是,並非這樣啊,父類中處理了 LBUTTONDOWN這個消息,子類中沒有做,然後會發現子類對話框 DoModal後,不會響應鼠標消息,按理說應該去找父類啊,好象並沒有。Why?

試著用classwizard添加了幾個消息處理函數,發現只有虛函數才可以做到,例如 OnInitialDialog()、OnOK()才能處理。但是這幾個函數在映射表裡是沒有的。也就是說它是直接被調用而不是通過所謂的映射表才找到的。Why?

候先生講的那種流動到底是怎麼回事?
rokia 2002-08-29
  • 打赏
  • 举报
回复
收到窗口消息的話不是應該先在子類裡查找處理函數嗎?找不到就到父類找,為什麼現在子類不處理父類也不會執行呢?

假如現在有一個功能很完善的對話框類,我想再開發一下,添加一些功能,我該怎麼做呢?
ColderRain 2002-08-29
  • 打赏
  • 举报
回复
要重载DLG的话,窗体上就不要放控件,在子类上放,重载副类的函数后,如果还想执行副类的代码,就在子类里加入副类的哪个函数.就和MFC的机制一样.
比如:
void MyDlg::OnDraw(CDC* pDC)
{
..........you code
Dlg::OnDraw(pDC);//Dlg是副类
}
once168 2002-08-29
  • 打赏
  • 举报
回复
当两个都映射的话以最现处理为准(即子类)
once168 2002-08-29
  • 打赏
  • 举报
回复
与你想像中的一样
当子类不映射这个消息时转向父类直到处理为此

16,472

社区成员

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

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

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