2011-04-05 50 views
0

我想單擊按鈕時更新用戶界面。但是,我沒有在CProjectDlg中使用直接方式。我有一個CMain類來處理操作。更新MFC中的用戶對話框

這裏是我的代碼:

ProjectDlg.cpp

void CProjectDlg::OnBnClickedButton1() 
{ 
    CMain *ptr = new CMain(); 

    ptr->Click(); 
    CString test = m_edit1; 
} 

Main.cpp的

void CMain::Click() 
{ 
    CProjecttDlg *ptr = new CProjectDlg(); 

    ptr->m_edit1.SetString(L"This is a test."); 
} 

在調試模式下,我發現m_edit1地址是不一樣的。所以這個功能是沒用的。

我需要將m_edit1的地址傳遞給Click()函數。我怎麼做?

謝謝。

回答

0

每次單擊時,都會創建一個新對話框。

CProjecttDlg * ptr = new CProjectDlg();

你必須做的是隻創建一次(也許在CMain構造函數?或第一次點擊被訪問)。要存儲它的值,只需使ptr成爲CMain的成員(在.h中定義等等)而不是本地變量。

0

你有問題。您正在調用CMain ::單擊一個CProjectDlg實例,但在CMain :: Click中創建一個新的CProjectDlg實例,並在該新對話框中設置編輯框,而不是原始窗口中的編輯框。

我不確切知道你在做什麼,但有一件事可以工作,就是將指向對話框的指針傳遞給CMain構造函數,然後在CMain :: Click中使用它來設置編輯框。就像這樣:

//CMain.h 
class CMain 
{ 
public: 
    CMain(CProjectDlg*); 

    Click(); 
protected: 
    CProjecDlg* m_Dlg; 
} 

// CMain.cpp 
CMain::CMain(CProjectDlg* dlg) 
{ 
    m_Dlg = dlg; 
} 

CMain::Click() 
{ 
    m_Dlg->m_edit1.SetString(L"This is a test."); 
} 

除此之外,我不知道是否有必要每次用戶單擊底部時創建一個新的CMain實例。

最後,我提供的可能的解決方案可能會起作用,但它也可能不是「正確的」。儘管沒有關於你想要做什麼的更多細節,但我沒有更多的幫助你。