Обновить диалог пользователя в MFC - PullRequest
0 голосов
/ 06 апреля 2011

Я хочу обновить пользовательский интерфейс при нажатии кнопки.Тем не менее, я не использую прямой путь внутри CProjectDlg.У меня есть класс CMain, который будет обрабатывать операцию.

Вот мой код:

ProjectDlg.cpp

void CProjectDlg::OnBnClickedButton1()
{
    CMain *ptr = new CMain();

    ptr->Click();
    CString test = m_edit1;
}

Main.cpp

void CMain::Click()
{
    CProjecttDlg *ptr = new CProjectDlg();

    ptr->m_edit1.SetString(L"This is a test.");
}

В режиме отладки я обнаружил, что адрес m_edit1 не совпадает.Так что функция бесполезна.

Мне нужно передать тот же адрес m_edit1 в функцию Click().Как мне это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

У вас есть проблема там.Вы вызываете CMain :: Click для экземпляра CProjectDlg, но создаете новый экземпляр CProjectDlg внутри CMain :: Click и устанавливаете поле редактирования в этом новом диалоговом окне, а не в исходном.

Я не знаюЯ не знаю точно, что вы пытаетесь сделать, но одна вещь, которая может сработать, - это передать указатель на диалоговое окно конструктору CMain, а затем в CMain :: Click использовать его, не устанавливая поле редактирования.Примерно так:

//CMain.h
class CMain
{
public:
    CMain(CProjectDlg*);

    Click();
protected:
    CProjecDlg* m_Dlg;
}

// CMain.cpp
CMain::CMain(CProjectDlg* dlg)
{
    m_Dlg = dlg;
}

CMain::Click()
{
    m_Dlg->m_edit1.SetString(L"This is a test.");
}

Кроме того, я не знаю, будет ли необходимо создавать новый экземпляр CMain каждый раз, когда пользователь нажимает на дно.

И, наконец,возможное решение, которое я предоставил, может сработать, но оно также может быть не «правильным».Но без более подробной информации о том, что вы пытаетесь сделать, я не смогу вам помочь.

0 голосов
/ 06 апреля 2011

Каждый раз, когда вы нажимаете, вы создаете новый диалог.

CProjecttDlg * ptr = new CProjectDlg ();

Что вам нужно сделать, это создать его только один раз (возможно, в конструкторе CMain? Или при первом обращении к клику).Чтобы сохранить его значение, просто сделайте ptr членом CMain (определите в .h и т. Д.) Вместо локальной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...