Здравствуйте VVV, Вы писали:
VVV>Здравствуйте Петров Андрей Викторович, Вы писали:
ПАВ>>Что-то я совсем запутался с этим классом.
ПАВ>>Создаю MFC приложение на базе диалогового окна,потом в OnInitInstanse() приложения пишу:
ПАВ>>CPropertySheet dlg("aaaaa");
ПАВ>>aaa page1;
ПАВ>>bbb page2;
ПАВ>>dlg.AddPage(&page1);
ПАВ>>dlg.AddPage(&page2);
ПАВ>>после этого убираю строку CDialog dlg, дальше идет DoModal(). Далее создаю два диалоговых окна. На первое помещаю EditBox( добавляю ему Control m_edit), на второе кнопку Button. Создаю новые классы для окон, наследники от CPropertyPage, называю их "aaa" и "bbb". Создаю новый класс "ссс", наследник от CPropertySheet . Ему в .h файл дописываю две переменные :
ПАВ>>public:
ПАВ>> aaa m_page1;
ПАВ>> bbb m_page2;
ПАВ>>Далее, в обработчике нажатия кнопки Button пишу код:
ПАВ>>ccc* parent=(ccc*)GetParent();
parent->>>m_page1.m_edit.SetDlgItemText(IDC_EDIT1,"qweqweqwe");
ПАВ>>запускаю программу и она вылетает при нажатии кнопки Button.
VVV>1. Заметь, что страницы m_page1, m_page — это не те страницы, что ты вставил по AddPage, поэтому окна там не созданы и вылетает скорее всего по ASSERT(::IsWindow(m_hWnd));.
VVV>2. SetDlgItemText надо вызывать у диалога (в твоём случае у страницы свойств), а не у m_edit
VVV>Делать примерно так:
VVV>parent->>GetPage(0)->SetDlgItemText(IDC_EDIT1,"qweqweqwe");
VVV>
VVV>Ещё один нюанс: страницы создаются по мере отображения на экране, т.е. если кнопка на первой странице, а эдит на второй и вторая страница не открывалась (не было на неё перехода), то, опять же, окно не создано и снова будет ASSERT.
Каким образом тогда использовать CPropertySheet, чтобы не было этих проблем?
Создавать страницы в конструкторе класса производного от CPropertySheet ?