powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DDX трабл
2 сообщений из 2, страница 1 из 1
DDX трабл
    #33844259
Exeptor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
У меня следующий вопрос.
Допустим в программе (MFC Dialog) лежит компонент CListCtrl и есть несколько вкладок. При переходе в очередную вкладку, в списке должно что-то отображаться, т.е. надо хранить как бы несколько списков, для чего проще юзать объекты CListCtrl.
Но КАК ОДНОМУ КОМПОНЕНТУ (IDC_LIST_FILES) ПРИВЯЗЫВАТЬ НЕСКОЛЬКО CONTROL-ПЕРЕМЕННЫХ?
Конечно, возникает мысль о вмешательстве в DDX:

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_LIST_FILES, m_ListContent[m_CurTab]);

CDialog::DoDataExchange(pDX);
}

Ясно, что в классе объявлено CListCtrl m_ListContent[MAX_TABS].
НО ВСЯ ЭТА ШТУКА НЕ РАБОТАЕТ!
На строчке DDX_Control(pDX, IDC_LIST_FILES, m_ListContent[m_CurTab]);
ПЕРВЫЙ раз (когда m_CurTab==0 и вызывается все это первый раз) ошибки не возникает,
а ВТОРОЙ – ошибка. Словно нельзя «пересопоставить» control-переменную, но разве эти связи где-то прописаны, кроме как в DoDataExchange?
Ведь задача очень типичная (один компонент, несколько его контентов), как обычно ее разрешают? Создавать массив структур накладно, там много разных столбцов..
Спасибо..
...
Рейтинг: 0 / 0
DDX трабл
    #33844752
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно быть:
Код: plaintext
1.
2.
3.
4.
5.
6.
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_FILES, m_ListContent[m_CurTab]);
}


Но КАК ОДНОМУ КОМПОНЕНТУ (IDC_LIST_FILES) ПРИВЯЗЫВАТЬ НЕСКОЛЬКО CONTROL-ПЕРЕМЕННЫХ?

Это можно делать только попеременно, поэтому это надо делать динамически. Методы - Attach/Detach.

но разве эти связи где-то прописаны, кроме как в DoDataExchange?

Да, в данных объекта-контрола и в статических данных MFC. Каждое окно Windows в один момент времени может быть привязано не более чем к одному объекту типа CWnd. Посмотрите код CWnd::FromHandle например.

(один компонент, несколько его контентов), как обычно ее разрешают?

Если вы о закладках, то делают так обычно: ставять N независимых контролов, а по переключению Tab (или чего там еще) прячут (hide) все кроме одного нужного.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DDX трабл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]