CPropertySheet
От: Петров Андрей Викторович  
Дата: 29.08.02 10:08
Оценка:
Что-то я совсем запутался с этим классом.
Создаю 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.
Re: CPropertySheet
От: VVV Россия  
Дата: 29.08.02 10:47
Оценка:
Здравствуйте Петров Андрей Викторович, Вы писали:

ПАВ>Что-то я совсем запутался с этим классом.

ПАВ>Создаю 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.


1. Заметь, что страницы m_page1, m_page — это не те страницы, что ты вставил по AddPage, поэтому окна там не созданы и вылетает скорее всего по ASSERT(::IsWindow(m_hWnd));.
2. SetDlgItemText надо вызывать у диалога (в твоём случае у страницы свойств), а не у m_edit

Делать примерно так:

parent->GetPage(0)->SetDlgItemText(IDC_EDIT1,"qweqweqwe");


Ещё один нюанс: страницы создаются по мере отображения на экране, т.е. если кнопка на первой странице, а эдит на второй и вторая страница не открывалась (не было на неё перехода), то, опять же, окно не создано и снова будет ASSERT.
Re[2]: CPropertySheet
От: Петров Андрей Викторович  
Дата: 29.08.02 11:20
Оценка:
Здравствуйте 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 ?
Re: CPropertySheet
От: Osco Португалия http://progs.biz
Дата: 29.08.02 11:21
Оценка:
Здравствуйте Петров Андрей Викторович, Вы писали:

ПАВ>Что-то я совсем запутался с этим классом.

Вот ссылка на примеры работающего кода с PropertySheet. Там и эта проблема решена.
http://progs.biz/vc/mfc/lessons/027.shtml
http://progs.biz/vc/mfc/lessons/028.shtml
http://progs.biz/vc/mfc/lessons/029.shtml
Osco do Casco
Re[2]: CPropertySheet
От: Петров Андрей Викторович  
Дата: 30.08.02 07:14
Оценка:
Здравствуйте Osco, Вы писали:

O>Здравствуйте Петров Андрей Викторович, Вы писали:


ПАВ>>Что-то я совсем запутался с этим классом.

O>:) Вот ссылка на примеры работающего кода с PropertySheet. Там и эта проблема решена.
O>http://progs.biz/vc/mfc/lessons/027.shtml
O>http://progs.biz/vc/mfc/lessons/028.shtml
O>http://progs.biz/vc/mfc/lessons/029.shtml


Спасибо всем, разобрался с этим делом.
Особенно помогли эти уроки :super:
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.