MFC之对话框

本文详细解析了MFC中对话框的工作原理,包括模式和非模式对话框的区别,以及如何通过重写OnInitDialog(), OnOK(), 和 OnCancel()等函数来定制对话框的行为。特别关注了数据绑定和更新的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 CDialog

1*对话框类在实例化的时候,当对话框类中的控件初始化完毕的时候,对话框会收到:

   WM_INITDIALOG消息,这时它的处理程序调用了一个虚函数---OnInitDialog(...)

  对话框类中有两个按钮控件IDOK/IDCANCEL,并且MFC已经为它写好了处理程序,在处理程序中调用了虚函数--

 OnOK()/OnCancel().

  上面的三个虚函数,我们经常需要重写。

 注意在OnInitDialog(...)中调用了UpdateData(fasle)--->调用了虚函数

                               DoDataExchange(CDataExchange *pcde){....DDX?DDV?DDC...}--》实现了对话框控件和对话框数据成员的绑定。----------是一个亮点啊!这是MFC给予我们的一个帮助。。。。(在这里是成员数据到控件的流动)

2*默认情况下,MFC在OnOk中实现了调用updatedata(true)--》DoDataExchange(CDataExchange *pcde){....DDX?DDV?DDC...}--》进而实现控件数据到成员数据的流动。然后调用了EndDialog().结束对话框。

默认情况下,OnCancel().调用了EndDialog().结束对话框。

3*模式对话框,需要CDialog::DoModal()==IDOK/IDCANCEL判断处理。一般不需重写OnOK()/OnCancel().

 4*在非模式对话框中,一般必须重写OnOK()/OnCancel(),点击IDOK(一般改名为apply)对话框不会关闭,在 OnOK中要把数据的改变以消息的形式发送出去。---AFxGetMainWnd->SendMessage(WM_APPLY,0,(LParam)&St).

非模式对话框一般作为窗口或视图的成员,以Create的方法创建,在堆上创建。需要重写PostNcDestroy()。

在非模式对话框中,OnCancel(){DestroyWindow();}

在非模式对话框创建时,对它的存在性进行判断是很有必要的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值