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