直到您调用DoModal()并且已经指出,在DoModal()返回时已经销毁该对话框及其控件。因此,您无法在DoModal()之前或之后调用GetDlgItem()。传递或检索数据到控件的解决方案是在类中使用一个变量。在调用DoModal()之前,可以在创建类实例时对其进行设置。在OnInitDialog()中,你把控制变量的值。然后,当窗口被销毁时,您从控件获取值并将其放入变量中。然后你从调用上下文中读取变量。
像这样的东西(注意我直接在浏览器中键入它,所以有可能是错误的):
class CMyDialog : CDialog
{
CString m_value;
public:
CString GetValue() const {return m_value;}
void SetValue(const CString& value) {m_value = value;}
virtual BOOL OnInitDialog();
virtual BOOL DestroyWindow();
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetDlgItemText(IDC_EDIT1, m_value);
return TRUE;
}
BOOL CMyDialog::DestroyWindow()
{
GetDlgItemText(IDC_EDIT1, m_value);
return CDialog::DestroyWindow();
}
然后你可以使用它像这样:
CMyDialog dlg;
dlg.SetValue("stackoverflow");
dlg.DoModal();
CString response = dlg.GetValue();
thnx您的评论,你可以给我的代码与你说的变化.. – abhinav 2011-05-10 06:06:25
我已经编辑了上面的例子与答案。 – 2011-05-10 06:31:23
Thnx现在工作很多,你对我很重。 – abhinav 2011-05-10 07:49:55