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的对象的,然后才调用,求解答 展开
控制函数AttrShowCtrl()调用函数内语句就会引起断言,主要是GetDlgItem(IDC_ATTR_BUTTON1)引起的,追踪到这个函数时参数nID是正确的,但是断言的参数为0
但是我在对话框2建了一个按钮3,用响应函数来控制控件,却能运行这句话。并且m_hwnd不为空如图一。
在对话框调用对话框2的时候我是new了一个对话框2的对象的,然后才调用,求解答 展开
1个回答
展开全部
“在对话框调用对话框2的时候我是new了一个对话框2的对象的”
你的描述不清晰,我认为是上面这一段话的问题,你必须获取已有对话框2的实际指针,而不是新建一个指针,才能控制实际已有的对话框。新建一个2的指针,实际是一个新的没有窗口的对话框类,是无法控制现有窗口的。
你的描述不清晰,我认为是上面这一段话的问题,你必须获取已有对话框2的实际指针,而不是新建一个指针,才能控制实际已有的对话框。新建一个2的指针,实际是一个新的没有窗口的对话框类,是无法控制现有窗口的。
更多追问追答
追问
追答
当然会出错。
DoModal是模态对话框,在没有调用DoModal之前,对话框2的窗口是不存在的,你调用的函数去访问窗口内的控件,比如出错。而在DoModal调用之后,模态窗口已经屏蔽了父窗口响应,直到函数返回(窗口已经关闭了)。
你的问题,解决方法有2:
如果希望两个对话框同时响应,用Create和ShowWindow创建非模态对话框,在Show之后调用你的函数即可。
模态对话框,只能在InitDialog里面做初始化控制,如果需要这个控制可以由父对话框“开关”,那么在DoModal之前,给2的一个自定义的成员变量赋值(控件无关变量),在OnInitDialog里面,通过这个变量控制显示和隐藏。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询