1
我試圖從一個函數中訪問一個對話框項目,它與對話框類不在同一個類中。我怎樣才能做到這一點?如何從另一個類訪問MFC中的對話框項?
例子:
class AnotherClass : CClas
{
AnotherClass();
public:
void MyFunction();
};
void AnotherClass::MyFunction() //Message overwriting, can't change parameters
{
CClass* temp = (CClass*)GetDlgItem(IDC_ID); //Reference to dialog item IDC_ID
temp->DoSomething(); //This gives me an assertion error
}
我知道我可以使用「本」,如果超過該消息的同一個對話的項目,但我想訪問另一個對話框項目。
感謝您的關注。
解決方案:
至於建議由武果汁,你可以簡單地通過對話,當你實例化類。就我而言,我無法做到這一點。出於某種原因,子類化不能以這種方式工作。如果你面對這樣的MFC應用程序時,同樣的問題,你可以創建一個指向一個CDialog並把它傳遞您的主對話框時的OnInitDialog():
實例(類):
class AnotherClass : CClass
{
AnotherClass();
public:
void MyFunction();
CDialog * mainDialog;
};
void AnotherClass::MyFunction() //Message overwriting, can't change parameters
{
CClass* temp = (CClass*)mainDialog->GetDlgItem(IDC_ID); //Reference to dialog item IDC_ID
temp->DoSomething(); //This gives me an assertion error
}
例( OnInitDialog()):
MyMainDialog::OnInitDialog()
{
...
AnotherClass obj; //Instantiate class
obj->mainDialog = this;
return true;
}
在這個例子中,只是在創建對象時將它作爲參數傳遞會更有意義。對於我所做的事情,這只是與我無關。
希望它可以幫助任何有類似問題的人。
我沒有完全沒有你所說的,因爲我不能錯過的對話時,我實例化的類的方式。但你給了我一個好主意。我在OnInitDialog()的新類中將指針「this」傳遞給了我的新類的指針,但是我不得不將我的新類中的指針設置爲public。謝謝 – Artie