如何从其他类访问MFC中的对话框项?
我试图从与dialog类不在同一类中的函数访问对话框项。我该怎么做 例如:如何从其他类访问MFC中的对话框项?,mfc,dialog,Mfc,Dialog,我试图从与dialog类不在同一类中的函数访问对话框项。我该怎么做 例如: class AnotherClass : CClas { AnotherClass(); public: void MyFunction(); }; void AnotherClass::MyFunction() //Message overwriting, can't change parameters { CClass* temp = (CClass*)GetDlgItem(IDC_ID); //Ref
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
}
我知道如果“this”与消息是同一个对话框项,我可以使用它,但我想访问另一个对话框项
谢谢你的关注
解决方案:
正如MooJuice所建议的,在实例化该类时,只需传递对话框即可。就我而言,我不能那样做。出于某种原因,子类化并没有以这种方式工作。如果在MFC中执行应用程序时遇到相同的问题,则可以创建指向CDialog的指针,并将其传递给位于OnInitDialog()的主对话框:
示例(类):
示例(OnInitDialog()):
在本例中,创建对象时仅将其作为参数传递更有意义。因为我所做的一切,这对我来说根本不起作用
希望它能帮助任何有类似问题的人。当您实例化另一个类时,将对话框类传递给它:
class AnotherClass
{
private:
CDialog& dialog_;
public:
AnotherClass(CDialog& dialog) : dialog_(dialog) { }
void MyFunction();
};
void AnotherClass::MyFunction()
{
CClass* temp = (CClass*)dialog_.GetDigItem(IDC_ID);
temp->doSOmething();
}
我没有按照你说的那样做,因为我在实例化类时无法传递对话框。但是你给了我一个好主意。我在OnInitDialog()上将指针“this”传递给我的新类中的一个指针,但我必须将新类中的指针公开。谢谢
MyMainDialog::OnInitDialog()
{
...
AnotherClass obj; //Instantiate class
obj->mainDialog = this;
return true;
}
class AnotherClass
{
private:
CDialog& dialog_;
public:
AnotherClass(CDialog& dialog) : dialog_(dialog) { }
void MyFunction();
};
void AnotherClass::MyFunction()
{
CClass* temp = (CClass*)dialog_.GetDigItem(IDC_ID);
temp->doSOmething();
}