在CMainFrame类中怎么用GetDlgItem()函数获取控件的指针
在CMainFrame类中如何用GetDlgItem()函数获取控件的指针
在一个对话框中设置了一些控件,我想在CMainFrame类中生成对话框,然后用GetDlgItem()函数获取对话框中控件的指针,我知道这个函数在对话框类外使用时需要传递一个句柄进去,可是我怎么才能获取对话框的句柄呢?
void CMainFrame::OnSysSetting()
{
CMyDlg dlg;
if( dlg.DoModal()==IDOK )
{
CButton *pButton=(CButton*)GetDlgItem(IDC_CHECK1); //此句出错
。。。
}
}
请问该怎么操作才能正确获得控件的指针呢?
------解决方案--------------------
dlg.DoModal()后,dialog已经销毁啦,自然取不到了。
------解决方案--------------------
dlg现在已经不能这样来得到控件了,不过你可以调用它的函数,或者是得到变量。
------解决方案--------------------
在DoModal之前使用CButton* pButton=(CButton*)dlg.GetDlgItem(IDC_CHECK1)
------解决方案--------------------
用法错误。
CMyDlg::OnOK中得到控件上的值放入成员变量。
------解决方案--------------------
应该把对话框中的数据保存在其他变量中,而不应该在窗口销毁之后再访问控件
两个方法
1、绑定一个BOOL变量到IDC_CHECK1控件,利用UpdateData()来取得CHECK状态
2、也可以在OnOK函数中保存IDC_CHECK1的状态
------解决方案--------------------
楼主的程序有两点问题:
1、当你DoModal对话框后(弹出对话框)主线程就不会执行DoModal()一下的代码了,直到关闭对话框。那么你在什么地方用这个控件的指针呢?
解决这个问题:你就需要创建一个无模态对话框(如果你必须要类似于模态对话框的效果,可以设置弹出对话框后父窗口不可用,消失对话框后设置父窗口可用。用无模态模拟模态)这样就可以在主线程弹出对话框后执行其他的代码了。
2、取得控件指针问题。
在对话框类中增加一个函数,传递一个控件指针进入,当初始化对话框后给指针赋值,这样在外面就可以使用了。
------解决方案--------------------
楼主,我遇到过和你一样的问题。。
if( dlg.DoModal()==IDOK )
{
CButton *pButton=(CButton*)GetDlgItem(IDC_CHECK1); //此句出错
//此时dlg的窗口已经被关闭,无法取得窗口控件的句柄是正常的
}
建议通过传递这个控制的指针,将值传出,传值的代码写在dlg实现中的OnOK里面就可以啦
在一个对话框中设置了一些控件,我想在CMainFrame类中生成对话框,然后用GetDlgItem()函数获取对话框中控件的指针,我知道这个函数在对话框类外使用时需要传递一个句柄进去,可是我怎么才能获取对话框的句柄呢?
void CMainFrame::OnSysSetting()
{
CMyDlg dlg;
if( dlg.DoModal()==IDOK )
{
CButton *pButton=(CButton*)GetDlgItem(IDC_CHECK1); //此句出错
。。。
}
}
请问该怎么操作才能正确获得控件的指针呢?
------解决方案--------------------
dlg.DoModal()后,dialog已经销毁啦,自然取不到了。
------解决方案--------------------
dlg现在已经不能这样来得到控件了,不过你可以调用它的函数,或者是得到变量。
------解决方案--------------------
在DoModal之前使用CButton* pButton=(CButton*)dlg.GetDlgItem(IDC_CHECK1)
------解决方案--------------------
用法错误。
CMyDlg::OnOK中得到控件上的值放入成员变量。
------解决方案--------------------
应该把对话框中的数据保存在其他变量中,而不应该在窗口销毁之后再访问控件
两个方法
1、绑定一个BOOL变量到IDC_CHECK1控件,利用UpdateData()来取得CHECK状态
2、也可以在OnOK函数中保存IDC_CHECK1的状态
------解决方案--------------------
楼主的程序有两点问题:
1、当你DoModal对话框后(弹出对话框)主线程就不会执行DoModal()一下的代码了,直到关闭对话框。那么你在什么地方用这个控件的指针呢?
解决这个问题:你就需要创建一个无模态对话框(如果你必须要类似于模态对话框的效果,可以设置弹出对话框后父窗口不可用,消失对话框后设置父窗口可用。用无模态模拟模态)这样就可以在主线程弹出对话框后执行其他的代码了。
2、取得控件指针问题。
在对话框类中增加一个函数,传递一个控件指针进入,当初始化对话框后给指针赋值,这样在外面就可以使用了。
------解决方案--------------------
楼主,我遇到过和你一样的问题。。
if( dlg.DoModal()==IDOK )
{
CButton *pButton=(CButton*)GetDlgItem(IDC_CHECK1); //此句出错
//此时dlg的窗口已经被关闭,无法取得窗口控件的句柄是正常的
}
建议通过传递这个控制的指针,将值传出,传值的代码写在dlg实现中的OnOK里面就可以啦