![]() |
|
![]() ![]() ![]() |
|
tusha |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
доброго времени суток всем!
полдня бьюсь с такой проблемой есть обычное MFC Dialog приложение, надо при запуске формы (приложения) свернуть в трей а саму форму убрать с экрана. с добавлением иконки в трей , с подвязкой обработчика событий на клик по иконке проблем нету. возникла проблема с сворачиванием приложения - при загрузке оно остается видимым на панеле задач(свернутое). однако ж когда второй раз нажимаю кнопку свернуть - оно обрабатывает нормально - т.е. убирается с экрана и панели задач. код: OnInitDialog()
OnSysCommand
подскажите в чем прикол ? ![]() |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 2 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
tusha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
да, забыл про эту фишку...
однако ж
тоже не хочет с первого раза работать, в дальнейшем - нормально |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 2 Всего: 106 |
сложно сказать, если тот код был имено на WM_SYSCOMMAND, то непонятно, как может быть связан nID с IDM_ABOUTBOX, оставь тут только свитч
но вообще, если без IDM_ABOUTBOX не работает, значит проблема где-то в другом месте -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
tusha |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
вот полностью
причем кусок
сгенерен самой студией при создании проекта |
||||
|
|||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
OnInitDialog() отрабатывает когда окна ещё нет на экране, поэтому сразу окно появляется в свёрнутом виде и видимое.
Что здесь удивительного - это идентификатор меню, то есть проверяется команда от системного меню, если он попал в OnSysСommand, значит показывается диалог About. |
|||
|
||||
tusha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
в таком случае в какой момент посылать окну сообщение
?? |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Когда оно появляется на экране.
Добавлено через 2 минуты и 41 секунду WM_SHOWWINDOW, толко обеспечь однократное срабатывание при первом показе окна, иначе окно всё время будет невидимым. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 2 Всего: 106 |
теперь понятно,
просто с API (тема мигрировала) это выглядит не логично, т.к. для использования такого "финта" нужно хотя бы дать понять, что была произведена работа с системным меню (добавление item'а), прежде чем вставлять IDM_ABOUTBOX в свитч системного меню -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
А разве студия не вставляет в OnInitDialog такой код?
|
|||
|
||||
tusha |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
Всеравно какойто бок получается...
создал обработчик на WM_SHOWWINDOW обработчик отрабатывает, однако после него еще какоето событие происходит....
т.е. мессаджбокс отрабатывает, но форма всеравно становится видимой...) Добавлено @ 10:30 такая же фигня если поместить данный кусок кода в обработчик OnPaint Это сообщение отредактировал(а) tusha - 31.8.2009, 10:31 |
|||
|
||||
GremlinProg |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 2 Всего: 106 |
а что мешает использовать немодальный диалог и начальный:
т.е. не показывать диалог вообще при старте, т.к.:
тут ведь ни слова о том, что уведомление должно сработать на ShowWindow -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Да, действительно не всё так просто с модальным диалогом. Как вариант можно попробовать скрыть окно таймером. Если найду что красивее, напишу.
|
|||
|
||||
tusha |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 17.7.2008 Репутация: нет Всего: 1 |
- этого то я и хочу добиться, чтоб при запуске вызвать приложение можно было тока из трея.
![]() |
||||||
|
|||||||
Albor |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
С таймером: в OnInitDialog вставляешь строку
Добавляешь обработчик WM_TIMER и в нём пишешь
|
||||
|
|||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |