![]() |
Модераторы: Alexeis |
![]() ![]() ![]() |
|
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Всем доброго времени суток! Пишу на С++ (MSVC 2005) под WinMobile.. Интересует следующее.. Как сделать так, чтобы при нажатие на кнопку ОК, находящуюся в правом верхнем углу диалога программа не закрывалась, а сворачивалась.. И как повесить на эту кнопку свой обработчик?
|
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: 2 Всего: 3 |
Brodyaga, а разве у формы нет события onClose?
|
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Есть, но что с того? Мне нужно на кнопку свой обработчик повесить как то...
|
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
ну что? неужели никто не знает? :(
Событие OnClose не вызывается при нажатии на кнопку ОК.. |
|||
|
||||
Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
...Потому что кнопка ОК - закрывает а не сворачивает форму. В правом верхнем углу у формы должен быть крестик (такие вот парадоксы) и тогда форма-приложение будет сворачиваемым.
Насчет OnClose... пишу на .NET CF - поэтому подсказать о С++ не могу. |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Тогда, как сделать этот самый крестик? а самое главное как обработать нажатие на эти кнопки.. потому что при нажатии на них во всех диалогах кроме главного, программа просто зависает.. а при нажатии на главном - закрывается...
|
|||
|
||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
MyForm.MinimizeBox = true;
В C# на .NET CF подпиской на соответствующие события.
У меня не зависает. |
||||
|
|||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Судя из первого поста С# меня не интересует. На C# у меня тоже не виснет и минимайзбокс свойство работает корректно.. Это сообщение отредактировал(а) Brodyaga - 6.3.2009, 13:28 |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
У меня в этом углу крестик. Расскажи как ты держишь девайс... -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Что значит как держу? Проект создаю MFC Smart Device Application основанный на диалогах..
|
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Проект такого типа я не создавал, но там наверно как и в обычном MFC. В дизайнере диалога щёлкни дважды по этой кнопке и открется её обработчик.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
![]() ![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Можно попробовать так: найти в свойствах диалога, как отключить эту системную кнопку. Чтоб ее воообще не было. А на ее месте нарисовать свою. А уж для своей кнопки обработчик сможешь приделать.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Можно.. Но помоему это будет через одно место... Должен же быть грамотный способ, как то ведь пишут такие приложения на с++ и нормально...
Это сообщение отредактировал(а) Brodyaga - 6.3.2009, 14:34 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
Brodyaga, все что тебе нужно - это перехватить событие этой кнопки.
Либо перегрузить функции PreTranslateMessage и перехватить там сообщение WM_COMMAND по параметрам IDOK (я обычно в трей пихаю по нажатию на эту кнопку) и IDCANCEL Либо в функции InitInstance есть переменная nResponse. Она принимает также принимает значения IDOK и IDCANCEL. Собственно простым оператором ветвления можешь описать свои действия. |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Первый вопрос:
Как запихнуть в терй по условию нажатия на эту кнопку Второй: Как быть с другими диалогами? По нажатию кнопки ОК на которых приложение зависает.. |
|||
|
||||
Brodyaga |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Ну и что... послал я по нажатию на IDOK форме сообщение, чтобы она свернулась.. а она всеровно закрылась...
Она же модально открывается... следовательно в любом случае наверное закроется... Как избежать то этого? |
||||
|
|||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Нашёл такую инфу...
вот ссылочки.. http://4pda.ru/forum/index.php?showtopic=6...aded&start= http://www.rsdn.ru/Forum/message/3010001.flat.aspx как там сказано использовал на диалогах (только не на главном) функцию SHDoneButton после их отображения:
Кнопка ОК действительно исчезла.. появилась кнопка X. Как обработать событие нажатия на эту кнопку?? P.S. Событие OnClose не срабатывает... :( |
|||
|
||||
Brodyaga |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Так никто и не ответил :(
Жаль.. Вот как это делается: в файле где создаётся объект главного диалога есть функция InitInstance(). В ней наш диалог открываеца как модальный:
При таком подходе сворачивания конечно не получица. Меняем это и открываем диалог как не модальный, убирая при этом кнопку ОК и ставя на её месте X:
После этого обрабатываем в нашем диалоге событие OnCancelMode:
Всё.. Кнопка ОК заменена на Х! И самое главное диалог по нажатию на Х действительно сворачивается! ![]() Это сообщение отредактировал(а) Brodyaga - 20.3.2009, 15:55 |
||||||
|
|||||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Опять вернусь к этому вопросу... для главной формы то сделал.. а как быть с остальными диалоговыми формами?! При нажатию на кнопку ОК которых, приложение виснет, а должно закрывать формы...
Написание обработчика в OnCancelMode() не помогло, так как следом вызывается OnCancelMode() главнйо формы и сворачивает всё формы одной левой... :( проект MFC Smart Device Application, MSVC 2005. |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Ну что? есть какиенить предположения, очень надо...
|
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Ну у тебя же есть уже свой класс диалогов CMyDialog? Пропиши все эти настройки у него в OnInitDialog , а потом все диалоги в своем приложении создавай как экземляры класса CMyDialog. И у них у всех будет
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Brodyaga |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Дык мне нужно чтобы у других как раз была кнопка OK, которая бы закрывала окно. А она есть, но при нажатии на неё приложение виснет...
какие эти? Если эти:
То это же я не в InitDialog прописывал, а в InitInstance, главного класса:
Это сообщение отредактировал(а) Brodyaga - 30.10.2009, 08:56 |
||||||
|
|||||||
ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
а раньше писал
вот и понял неправильно Ну наверно стоит поставить брекпойнт в оконной функции и посмотреть, что происходит на сообщении WM_CLOSE. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
Brodyaga |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Да, это я неправильно выразился
Тут нет оконной функции, MFC. Можно подписаться на сообщение WM_CLOSE, но прога туда не переходит :( как быть? |
||||
|
|||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Выкладываю пример, в котором можно наблюдать то, о чём я говорю.
Чтобы увидеть это: 1. Запустите приложение 2. Нажмите кнопку "Открыть форму" 3. На открытой форме нажмите кнопку ОК в правом верхнем углу. Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Я не наблюдаю зависания. По-моему просто на это нажатие нет никакого действия. Кнопка мигает при каждом нажатии, т.е. реагирует.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Brodyaga |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
А попробуй после нажатия на кнопку ОК(в правом верхнем углу) понажимать на кнопки ОК и Cancel на форме.. |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
После первого нажатия на любую кнопки ОК и Cancel перестают реагировать. Так что по-моему дело не только в кнопке ОК в правом верхнем углу. Если будет время, я ещё посмотрю. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
самый простой способ это не делать приложение на базе диалога. Из-за этого и появляется ок вместо х
или как вариант можно изменить стиль на лету Добавлено через 5 минут и 3 секунды
тебе надо перегрузить методы OnOk & OnCancel |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование мобильных устройств" | |
|
Раздел посвящен программированию мобильных устройств. Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п), |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |