Как обновить элемент управления вне диалогового окна? - PullRequest
1 голос
/ 08 июня 2009

Например, в программе MFC у меня есть основное приложение и «класс». Что мне делать, если я хочу обновить элемент управления (скажем, список), который находится в моем главном приложении из этого «класса»?

Ответы [ 4 ]

1 голос
/ 28 ноября 2012

Вот пример, который работал для меня

theApp.m_pMainWnd->GetDlgItem(IDC_BUTTON6)->SetWindowTextW(L"Run Auto Test");
0 голосов
/ 08 июня 2009

Если у вас есть дескриптор объекта диалога в вашем классе, вы можете использовать GetDlgItem (ResourceID) , чтобы получить объект управления списком.

0 голосов
/ 08 июня 2009

Самый простой подход состоит в том, чтобы предоставить представление списка из формы / окна приложения классам, которые его используют. Это можно сделать, передав объект listview (или родительское окно) в конструктор класса или сохранив его в статической переменной, доступной для класса.

Для лучшей инкапсуляции вы можете поместить в приложение метод, который может вызвать класс, например, "AddItemToListBox ()". Это позволяет объекту приложения контролировать доступ к списку. Опять же, вы можете сделать это как статический метод или передать указатель this в главном программном объекте в конструктор класса.

т.е.

class CApplication
{
    CListBox m_ListBox;

public:
    static void CApplication::AddItemToListBox(CString itemText)
    {
        // Add the item as you wish here
    }

}

class CMyClass
{
    afx_msg void CMyClass::OnMouseDown(...)
    {
          CApplication::AddItemToListBox("This is a test");
    }
}
0 голосов
/ 08 июня 2009

Ваш класс может быть спроектирован для запуска события, которое может прослушивать ваше основное приложение. Затем может быть вызван слушатель / обработчик события / делегат для обработки события и обновления списка. Как правило, большинство форматов событий передают ссылку отправителя, в данном случае ваш «класс», а также объект, содержащий аргументы события. Эти аргументы можно использовать для передачи списка элементов, которые вы хотите добавить в список.

...