Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как закрыть CPropertySheet

1.9K
18 февраля 2006 года
Rad87
123 / / 14.12.2005
Проблемы начались с того что я спомощью ON_COMMAND(IDOK, OnOKb) перехватил сообщение откнопки чтобы ее обработать (другого способа я не нашел) В результате форма перестала закрываться
Проблема осложняется тем что CPropertySheet не наследник CDialog и т.е у него нет функции OnOK(),
а также тем что Sheet у меня открывается модально и следовательно при использовании CloseWindow() и ShowWindow() родительское окно всеравно остается заблокировано.А DestroyWindow() не нравится почему-то DoModal()( выдает ошибку)
Посоветуйте что-нибудь!!!!!!!!!!
324
18 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Rad87
Проблемы начались с того что я спомощью ON_COMMAND(IDOK, OnOKb) перехватил сообщение откнопки чтобы ее обработать (другого способа я не нашел) В результате форма перестала закрываться
Проблема осложняется тем что CPropertySheet не наследник CDialog и т.е у него нет функции OnOK(),
а также тем что Sheet у меня открывается модально и следовательно при использовании CloseWindow() и ShowWindow() родительское окно всеравно остается заблокировано.А DestroyWindow() не нравится почему-то DoModal()( выдает ошибку)
Посоветуйте что-нибудь!!!!!!!!!!



У тебя в запасе есть еще ON_COMMAND(IDCANCEL, OnCancel)

2.4K
18 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Rad87
Проблемы начались с того что я спомощью ON_COMMAND(IDOK, OnOKb) перехватил сообщение откнопки чтобы ее обработать (другого способа я не нашел) В результате форма перестала закрываться



В конце твоей OnOK нужно вызвать СDialog::OnOK();
и диалог закроется. Если это кнопка диалога.

324
19 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by dinasok51
В конце твоей OnOK нужно вызвать СDialog::OnOK();
и диалог закроется. Если это кнопка диалога.



При этом закроется только текущая страница, надо вызывать OnOК для всего CPropertySheet

2.4K
19 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by AndreySar
При этом закроется только текущая страница, надо вызывать OnOК для всего CPropertySheet


Это неверно
CDialog::OnOK() это вызов функции класса CDialog и прямого отношения ни к CPropertySheet ни к PropertyPage не имеет

Вызов CDialog::OnOK() закрывает диалог и все что на нем установлено - все дочернее, относящееся к этому диалогу.

324
19 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by dinasok51
Это неверно
CDialog::OnOK() это вызов функции класса CDialog и прямого отношения ни к CPropertySheet ни к PropertyPage не имеет

Вызов CDialog::OnOK() закрывает диалог и все что на нем установлено - все дочернее, относящееся к этому диалогу.



А ты попробуй - посмотри что получится

2.4K
19 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by AndreySar
А ты попробуй - посмотри что получится


У меня со школьной скамьи именно так все и работает
А CDialog::OnOK() это вызов функции класса CDialog и ничего другого он не вызывает (Если специально не постараться)

1.9K
19 февраля 2006 года
Rad87
123 / / 14.12.2005
Из-за того что CPropertySheet наследник CWnd а не CDialog естественно вызов CDialog::OnOK() не возможен (навсякий случай даже проверил :) ) а вот
AndreySar подсказал мне идею, правда я не понял что он имел в виду под использованием ON_COMMAND(IDCANCEL, OnCancel), но его идею я понял в том что можно использовать Cancel для закрытия окна, и я с помощью
bbb.SendMessage(WM_LBUTTONDOWN, 0, 0);
bbb.SendMessage(WM_LBUTTONUP, 0, 0);
всетаки закрыл окно.

Но я всекаки не понял почему у меня не получилось закрыть модальное окно нормальным способом. Если кто сталкивался с подобной проблемой подскажите.
2.4K
19 февраля 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Rad87
Из-за того что CPropertySheet наследник CWnd а не CDialog естественно вызов CDialog::OnOK() не возможен (навсякий случай даже проверил :) ) а вот
AndreySar подсказал мне идею, правда я не понял что он имел в виду под использованием ON_COMMAND(IDCANCEL, OnCancel), но его идею я понял в том что можно использовать Cancel для закрытия окна, и я с помощью
bbb.SendMessage(WM_LBUTTONDOWN, 0, 0);
bbb.SendMessage(WM_LBUTTONUP, 0, 0);
всетаки закрыл окно.

Но я всекаки не понял почему у меня не получилось закрыть модальное окно нормальным способом. Если кто сталкивался с подобной проблемой подскажите.



Несколько уточнений:
1. Я спутал тебя с lgv, виноват, не то в голове крутилось
2. Закрыть CPropertySheet можно например вызвав
CPropertySheet::EndDialog()
Если ты перехватил OnCommand от ОК и сделал все что нужно, выполни

 
Код:
return CPropertySheet::OnCommand(wParam, lParam);

в конце твоей OnCommand. Все закроется.
3. PropertyPage закрывается корректно по CPropertyPage::OnOk() (можно и СDialog::OnOK(), но это ИМХО некорректно). Но если это вызывается функцией класса произведенного от СPropertyPage
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог