abh*_*nav 3 mfc modal-dialog visual-c++
从模态MFC对话框,我想在关闭对话框后从编辑框中提取文本.我试过这个:
CPreparationDlg Dlg;
CString m_str;
m_pMainWnd = &Dlg;
Dlg.DoModal();
CWnd *pMyDialog=AfxGetMainWnd();
CWnd *pWnd=pMyDialog->GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("huha max");
return TRUE;
Run Code Online (Sandbox Code Playgroud)
这是行不通的.
Mar*_*ila 21
在调用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();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
CMyDialog dlg;
dlg.SetValue("stackoverflow");
dlg.DoModal();
CString response = dlg.GetValue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23399 次 |
| 最近记录: |