Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [CDialog] OnActivate и OnShowWindow не срабатывают 
V
    Опции темы
ksili
Дата 12.2.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Мне надо, чтобы при открытии диалога выполнялись некоторые действия. 
Я добавил для него обработчики события OnActivate и OnShowWindow, поставил в них брекпойнты, они активны. Но при открытии диалога управление ни в один из этих обработчиков не попадает. 
Однако в OnShowWindow управление попадает, когда я после открытия этого диалога открываю какой-нибудь другой диалог. 
В чем может быть дело? Вот кратко код:

*.h
Код

    afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
    afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);

*.cpp
Код

BEGIN_MESSAGE_MAP(CUpdateFWDlg, CBaseFWDlg)
    ON_WM_ACTIVATE()
    ON_WM_SHOWWINDOW()
END_MESSAGE_MAP()

....................


void CUpdateFWDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
.......
}

void CUpdateFWDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
.........
}


Добавлено через 9 минут и 6 секунд
А сейчас управление в OnShowWindow поймалось, когда нажал на одну из кнопок в диалоге. Думаю OnShowWindow вообще не надо использовать - для моего случая она не подходит.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
voov
Дата 12.2.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



OnInitDialog не подходит? 
PM MAIL   Вверх
ksili
Дата 12.2.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(voov @  12.2.2009,  16:25 Найти цитируемый пост)
OnInitDialog не подходит?

А когда оно срабатывает?

Сейчас OnSetFocus попробую. Если не подойдет, попробую OnInitDialog

Добавлено через 12 минут и 49 секунд
OnSetFocus тоже не сработал.

Я бы рад использовать OnInitDialog, но не пойму как. Сообщения WM_INITDIALOG я не нашёл, есть только WM_INITMENU и WM_INITMENUPOPUP. 
Я посмотрел другой диалог, где уже есть такая функция, но не врубился - есть объявление и определение этой функции, но нигде нет ее вызова. В карте сообщений она тоже не прописана. При этом я проверил: управление в нее попадает только при создании приложения, а не при открытии этого диалога.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
voov
Дата 12.2.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Срабатывает после создания диалога, перед его отображением. Но только 1 раз, если тебе нужно выполнять действия после сварачивания/разварачивания диалога или еще как, то не подойдет.
PM MAIL   Вверх
Andrey44
Дата 12.2.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



ksili, что-то не понятно, что тебе конкретно надо?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ksili
Дата 13.2.2009, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(ksili @  12.2.2009,  16:12 Найти цитируемый пост)
Мне надо, чтобы при открытии диалога выполнялись некоторые действия. 

Без всякого ожидания, без нажатия каких-либо кнопок. Сразу.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Andrey44
Дата 13.2.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



ksili, Открытие это когда ты собираешься его показать?
И каждый раз при показе ты хочешь что-то делать?
Ну ты-же его как-то показываешь? Вот и делай что нибудь перед тем как показываешь.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 13.2.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



OnInitDialog - это виртуальная функция, нужно ее просто переопределить.
Не знаю, где искал WM_INITDIALOG, если не нашел... видимо в предложениях мастера... smile 
НО: OnInitDialog приходит, когда диалог еще не виден! Если тебя это устраивает, то нормально. А если нет - тогда лови первый WM_KICKIDLE (если диалог модальный). Это спец сообщение MFC (нужно подключить afxpriv.h) которое приходит каждый раз, когда модальный диалог входит в цикл простоя; в первый раз оно приходит после завершения всех инициализаций и отображения диалога.


--------------------
...
PM   Вверх
ksili
Дата 13.2.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Это диалог проверки обновлений.

Когда он открывается программа проверяет наличие обновлений, в это время отображается надпись Checking for updates...
Затем, в зависимости от результатов проверки, могут отображаться разные надписи, а первая надпись исчезает.

Т.е. делать это надо не до открытия диалога, а сразу после того, как он отобразился на экране.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Andrey44
Дата 13.2.2009, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата

The framework calls this member function when the nonclient area needs to be changed to indicate an active or inactive state.

 
afx_msg BOOL OnNcActivate(
   BOOL bActive 
);
 


Попробуй может поможет.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ksili
Дата 13.2.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Andrey44 @  13.2.2009,  13:28 Найти цитируемый пост)
Попробуй может поможет.

Тоже не помогло.

Цитата(Earnest @  13.2.2009,  12:48 Найти цитируемый пост)
Не знаю, где искал WM_INITDIALOG, если не нашел... видимо в предложениях мастера...

В который раз убеждаюсь, что слово vusual в названии студии это просто замануха. Почти ничего в ней визуального нету, все руками делать. В Билдере бы проблемы данного топика вообще не возникло - заполнил обработчик формы OnShow, и все.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Earnest
Дата 13.2.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Не руками, а головой.
Так в чем проблема, программируй в Борланде. А visual означает всего лишь, что сразу видно кто есть кто... smile 


--------------------
...
PM   Вверх
ksili
Дата 13.2.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Earnest @  13.2.2009,  14:02 Найти цитируемый пост)
Так в чем проблема, программируй в Борланде

это зависит не от меня в данном случае

Цитата(Earnest @  13.2.2009,  12:48 Найти цитируемый пост)
WM_KICKIDLE

Интересно, в MSDN отдельной статьи про это сообщение нету. Оно только упоминается в статье про CWnd::RunModalLoop. Но из нее непонятно когда оно приходит
Из ваших слов, Earnest, я понял, что оно будет приходить не только при открытии диалога, а еще и когда он просто открыт, и какое-то время ничего не происходит. Так?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Earnest
Дата 13.2.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да, оно приходит каждый раз после опустошения очереди событий. Сразу, а не через некоторое время.


--------------------
...
PM   Вверх
ksili
Дата 13.2.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Но ведь это же не то, что мне нужно. Мне нужно один раз после открытия диалога (после того как он отобразился на экране)


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1232 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.