MFC中一个对话框控件响应打开另一个对话框的问题

我建了两个对话框,其中对话框1有一个按钮,响应函数打开对话框2,并控制对话框2的控件,我在对话框2写了一个控制函数,对话框1通过调用对话框2的控制库函数来控制对话框2的控... 我建了两个对话框,其中对话框1有一个按钮,响应函数打开对话框2,并控制对话框2的控件,我在对话框2写了一个控制函数,对话框1通过调用对话框2的控制库函数来控制对话框2的控件,控制控件显示与隐藏,但是出现了问题

控制函数AttrShowCtrl()调用函数内语句就会引起断言,主要是GetDlgItem(IDC_ATTR_BUTTON1)引起的,追踪到这个函数时参数nID是正确的,但是断言的参数为0

但是我在对话框2建了一个按钮3,用响应函数来控制控件,却能运行这句话。并且m_hwnd不为空如图一。
在对话框调用对话框2的时候我是new了一个对话框2的对象的,然后才调用,求解答
展开
 我来答
bhtzu
2015-04-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4228万
展开全部
“在对话框调用对话框2的时候我是new了一个对话框2的对象的”
你的描述不清晰,我认为是上面这一段话的问题,你必须获取已有对话框2的实际指针,而不是新建一个指针,才能控制实际已有的对话框。新建一个2的指针,实际是一个新的没有窗口的对话框类,是无法控制现有窗口的。
更多追问追答
追问

因为对话框2是一个新建的对话框,还没有生成对象。

如果我在对话框1的响应函数中直接获取对话框2的指针

再调用Domodal()依然出错。

如果我是这样的话

这样就能打开对话框,但是把注释去掉的话就出现断言错误。图一就是调用的函数,图二是追踪到的断言错误

追答

当然会出错。

DoModal是模态对话框,在没有调用DoModal之前,对话框2的窗口是不存在的,你调用的函数去访问窗口内的控件,比如出错。而在DoModal调用之后,模态窗口已经屏蔽了父窗口响应,直到函数返回(窗口已经关闭了)。

你的问题,解决方法有2:

  1. 如果希望两个对话框同时响应,用Create和ShowWindow创建非模态对话框,在Show之后调用你的函数即可。

  2. 模态对话框,只能在InitDialog里面做初始化控制,如果需要这个控制可以由父对话框“开关”,那么在DoModal之前,给2的一个自定义的成员变量赋值(控件无关变量),在OnInitDialog里面,通过这个变量控制显示和隐藏。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式