mfc通过classwizard将对话框资源和对话框类联系起来,内部是不是会新建该类的一对象?是的话如何得到它?
展开全部
除了自动生成的主对话框以外,其他楼主自己添加的子对话框,在生成对应类之后,都没有实例化对象。其实主对话框类的对象已经在XXX.CPP里(XXX为楼主创立的工程名字)里InitInstance()函数中,声明实例化了。楼主要是想使用子对话框类,就需要声明实例化一个,然后可以用模态对话框的方式或者非模态对话框的方式,创建对话框。其实微软把WINMAIN函数封装起来了,那个是楼主程序的入口。
更多追问追答
追问
我那个工程是基于对话框的,工程里面又添加了一个对话框,然后关联了一个类。对该对话框上加控件以及相应函数式可以的,这是不是说明已经有该类对象产生了?
追答
if( cw.DoModal() == IDOK )
你用了这个cw应该就是你所说的那个子对话框类所声明的对象吧,cw就是那个实例化的对象了,可以用了,而且楼主这里用了模态对话框。
至于你的报错“GetDlgItemInt()函数会出错,::isWindow(m_hWnd)”,原因如下:
cw.DoModal() == IDOK是在对话框点击了“确认”“取消”两种按钮后,接下来要继续往下做的事情。MSDN里是这么解释的:在关闭此模态对话框时,其返回值为关闭对话框时所采用的方式,因此它只在对话框关闭时才返回相关参数值,默认对话框关闭方式有2种:OnOK(); OnCancel()。所以你在IF的括弧里在使用cw.GetDlgItemInt是不可能的,因为cw这个对象已经伴随其对话框,一起呗注销和回收了,所以你再用这个是没有了。
如果你要使用cw.GetDlgItemInt,最好这样
cw.DoModal();
m_iPicHeight = cw.GetDlgItemInt(IDC_HEIGHT);
m_iPicWidth = cw.GetDlgItemInt(IDC_WIDTH);
展开全部
主对话框类的对象是在CxxxApp类中的InitInstance函数中声明的,并且会将声明的对象的地址赋值给CWinThread类的m_pMainWnd成员变量。
你可以在通过m_pMainWnd变量获得主对话框的指针。
你可以在通过m_pMainWnd变量获得主对话框的指针。
更多追问追答
追问
if( cw.DoModal() == IDOK )
{
m_iPicHeight = cw.GetDlgItemInt(IDC_HEIGHT);
m_iPicWidth = cw.GetDlgItemInt(IDC_WIDTH);
}
这个能进到里面去,但是GetDlgItemInt()函数会出错,::isWindow(m_hWnd),好像是句柄为空,本来是想得到对话框控件上的值。是什么问题??
追答
当DoModal返回的时候,对话框已经被销毁了,所以肯定会出错。
如果你想要得到子窗体上控件的值,定义一个全局变量,在子窗体关闭之前将控件的上的值赋值给全局变量,主窗体再通过该全局变量获取。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询