Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2020, 23:21   #1
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию mfc list control

Здравствуйте.
Имеется диалоговое окно в нём находится list control. В него необходимо ввести данные и затем открыть.
Zadanie -класс диалога, listb - переменная ctrl list.
Код кнопки вызывающей диалоговое окно:
[CPP]
Zadanie dll ;
ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
dll.Zadanie::listb.InsertColumn(0, L"f", LVCFMT_LEFT, 150);
dll.Zadanie::listb.InsertColumn(1, L"i", LVCFMT_LEFT, 150);
dll.Zadanie::listb.InsertColumn(2, L"o", LVCFMT_LEFT, 150);
dll.Zadanie::listb.InsertColumn(3, L"Year", LVCFMT_LEFT, 150);
dll.Zadanie::listb.DeleteAllItems() ;
Student* st = GetDocument()->m_list.GetFirst();
for (; st != NULL; st = GetDocument()->m_list.GetNext())
{
int nPos = dll.Zadanie::listb.InsertItem(dll.Z adanie::listb.GetItemCount(), st->Getf(), 0);
dll.Zadanie::listb.SetItemText(nPos , 1, st->Geti());
dll.Zadanie::listb.SetItemText(nPos , 2, st->Geto());

CString sYear;
sYear.Format(L"%d", st->GetYear());
dll.Zadanie::listb.SetItemText(nPos , 3, sYear);
dll.Zadanie::listb.SetItemData(nPos , (DWORD_PTR)st);
}
dll.DoModal();
[/CPP]
Ошибка:
Вызывается исключение из-за m_Hwnd и this равного null на insertcolumn.
Я подумал, что проблема в том что переменной контрола не сопоставлено его ид. Я хотел бы узнать способ сделать это.
Я знаю что это делается в программе после вызова DoModal в DoDataExchange.
[CPP]DDX_Control(pDX, IDC_LIST1, listb);[/CPP]
Но мне надо сделать это до domodal.
Егор28г вне форума Ответить с цитированием
Старый 15.05.2020, 08:29   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Егор28г Посмотреть сообщение
Но мне надо сделать это до domodal
OnInitDialog вам в помощь...
waleri вне форума Ответить с цитированием
Старый 15.05.2020, 10:21   #3
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

Спасибо за ваш ответ. Из OnInitDialog() не знаю как вызвать DodataExchange(pdx), так как не знаю как передать параметр CDataExchange* pDX. Если без его вызова, то ошибка та же:
Код:
void CursuchView::OnComplete()
{
	Zadanie dll ;
	dll.OnInitDialog();
        .....
}
BOOL Zadanie::OnInitDialog()
{
	listb.InsertColumn(0, L"f", LVCFMT_LEFT, 150);
        .....
}
Та же ошибка, причина та же.
Егор28г вне форума Ответить с цитированием
Старый 15.05.2020, 14:02   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Егор28г Посмотреть сообщение
Из OnInitDialog() не знаю как вызвать DodataExchange(pdx),
UpdateDialog(FALSE);
waleri вне форума Ответить с цитированием
Старый 15.05.2020, 15:54   #5
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

Что это за функция? Есть UpdateDialogControls, она не подходит
Егор28г вне форума Ответить с цитированием
Старый 15.05.2020, 16:05   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Опечатался - UpdateData(FALSE).
Только вызывать ее не надо, ее OnInitDialog сам вызывает по умолчанию.
waleri вне форума Ответить с цитированием
Старый 15.05.2020, 16:18   #7
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

Простите мне мое тугоумие, что должно находиться в oninitdialog()? Если там ничего нет, то dodataexchange не вызывается. Если я пытаюсь её вызвать через UpdateData(false); то выпадает исключение опять h_Wnd равен нулю.
Егор28г вне форума Ответить с цитированием
Старый 15.05.2020, 16:49   #8
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

там лежит CDialog:ninitdialog(). На нем тоже исключение.
Егор28г вне форума Ответить с цитированием
Старый 15.05.2020, 18:08   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Егор28г Посмотреть сообщение
что должно находиться в oninitdialog()
Ничего, надо писать свой DoDataExchange метод, диалог сам его вызовет.
waleri вне форума Ответить с цитированием
Старый 15.05.2020, 20:41   #10
Егор28г
Пользователь
 
Регистрация: 21.05.2019
Сообщений: 25
По умолчанию

Спасибо всё получилось. Остался один глупый вопрос. При попытке использования оператора =. Появляется нелепая ошибка.
Код:
dll.Zadanie::list.operator=(GetDocument()->m_list)
или
Код:
dll.Zadanie::list = GetDocument()->m_list;
При этих попытках сделать присваивание появляется ошибка:
List:perator=: должна возвращать значение.
Код операции присваивание:
Код:
List& operator=(List& rhv)
	{
		Clear();
		CopyFrom(rhv);
	}
Егор28г вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки контроля доступа Access Control List (ACL) Бодя21 Visual C++ 0 20.09.2013 17:52
Не удается добавить сортировку в List Control: Error 64 error C2504: 'CHeaderCtrl' : base class undefined vaan.sk Общие вопросы C/C++ 2 29.11.2012 09:48
Вопрос List Control sawyer1988 Win Api 3 29.05.2012 15:43
Вопрос List Control sawyer1988 Общие вопросы C/C++ 1 28.05.2012 22:54
List Control. Ввод данных с клавиатуры juky88 Общие вопросы C/C++ 1 01.05.2011 18:51