直到您調用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