如何从其他类访问MFC中的对话框项?

如何从其他类访问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

我试图从与dialog类不在同一类中的函数访问对话框项。我该怎么做

例如:

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();
}