Я пытаюсь получить доступ к элементу диалога из функции, которая не принадлежит к тому же классу, что и класс диалога. Как я могу это сделать?
Пример:
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», если это тот же элемент диалога, что и сообщение, но я хочу получить доступ к другому элементу диалога.
Спасибо за внимание.
Решение:
Как подсказал Му-Джус, вы можете просто пропустить диалоговое окно при создании экземпляра класса. В моем случае я не мог этого сделать. По какой-то причине создание подклассов не работает таким образом. Если вы сталкиваетесь с той же проблемой при выполнении приложения в 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;
}
В этом примере имеет смысл просто передать его в качестве параметра при создании объекта. Это просто не помогло мне за то, что я делал.
Надеюсь, это поможет любому с подобным вопросом.