Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: SirAlex Россия  
Дата: 09.09.09 07:10
Оценка: 6 (1)
Решал ровно такую же задачу.
Тоже были проблемы что сплэш и сообщение из разных потоков.

Сделайте сплэш скрываемым не только по завершению загрузки, но и по таймеру.
Тогда даже если выскочит мессаджбокс и загрузка замрет, то сплэш через несколько секунд скроется.
Re[7]: ShowMessage со стилем WS_POPUP как сделать?
От: ononim  
Дата: 09.09.09 12:19
Оценка: 6 (1)
K>>>>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?
C>>>Да вроде где-то выше "мелькало" что сплеш в одном процессе, а MessageBox из другого...
K>>И что?
C>А что пройдет такой вариант? (без подколки, мне действительно интересно).
C>Если да, то в какой-нить Виста проблем не будет?
Все будет хорошо.
Как много веселых ребят, и все делают велосипед...
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 09:59
Оценка: 1 (1)
Здравствуйте, kero, Вы писали:

K>Совет заведомо неважнецкий.

K>Ибо такой сплеш заведомо окажется под уже существующими topmost-окнами, например — под тултипами, что смотрится препротивно.

Зато юзабельный.

Кроме того, нефиг окнам неактивного приложения быть топмост.
Обычно бесприютные тултипы — это следствие замёрзшего или зависшего приложения. Они в любом случае смотрятся препротивно.
А если это какое-то полезное топмост окошко (ну там, не знаю, виджет буфера обмена), то прятать его — подлянка.

K>Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту


Поскольку парентом попапов выступает десктоп, мы получаем ровно то поведение, которое нам нужно
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: SirAlex Россия  
Дата: 14.09.09 11:02
Оценка: 1 (1)
P>Кажись в MessageBox первым аргументом можно передать хэндл на сплэш.

Так делать не стоит, по своему опыту. Если эти два потока потока работают несинхронно то сплэш закроется и закроет вместе с собой MessageBox.
Отслеживать количество чайлдов на сплэше тоже не выход. при определнных языковых настройках там может оказатся еще одно системное, скрытое окошко IM.. чего то там(для азиатских языков).

Лучший выход — самозахлапывающийся сплэш. по завершению загрузки, по таймеру или по клику мышки.
И нормальный парент у MessageBox, а не NULL.
ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 05.09.09 08:51
Оценка:
Есть прога, она показывает по центу экрана сплеш-скрин при старте (как окно, со стилем WS_POPUP). При запуске прога также запускает еще один процесс.

Если в порожденном процессе чего-то нехватает, то он о этом сообщает юзеру вызывая
    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
                      MB_ICONINFORMATION|MB_TOPMOST);

(и пока юзер не ткнет ОК, работу не продолжает).

Проблема в том, что в иногда в некоторых виндах (кажется в висте и семерке, но иногда и в XP бьвает) сплеш скрин перекрывает то сообщение об ошибке, юзер его не замечает (несмотря на то, что в таскбаре новое окно появляется), и юзер жалуется что прога зависла.

Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?

Спасибо заранее за ответы!
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re: ShowMessage со стилем WS_POPUP как сделать?
От: -prus-  
Дата: 05.09.09 09:02
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Есть прога, она показывает по центу экрана сплеш-скрин при старте (как окно, со стилем WS_POPUP). При запуске прога также запускает еще один процесс.


W>Если в порожденном процессе чего-то нехватает, то он о этом сообщает юзеру вызывая

W>
W>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
W>                      MB_ICONINFORMATION|MB_TOPMOST);
W>

W>(и пока юзер не ткнет ОК, работу не продолжает).

W>Проблема в том, что в иногда в некоторых виндах (кажется в висте и семерке, но иногда и в XP бьвает) сплеш скрин перекрывает то сообщение об ошибке, юзер его не замечает (несмотря на то, что в таскбаре новое окно появляется), и юзер жалуется что прога зависла.


W>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


W>Спасибо заранее за ответы!


Может сначала диагностировать, что устройство подключено и готово и только потом сплэш скрин показывать и грузить все остальное? А в случае если не готово показывать только MessageBox?
С уважением,
Евгений
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 05.09.09 09:16
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Может сначала диагностировать, что устройство подключено и готово и только потом сплэш скрин показывать и грузить все остальное? А в случае если не готово показывать только MessageBox?


Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: -prus-  
Дата: 05.09.09 09:24
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..


Может тогда попробовать создавать MessageBox с типом MB_SETFOREGROUND? Так:

    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
                      MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);



MB_SETFOREGROUND
The message box becomes the foreground window. Internally, the system calls the SetForegroundWindow function for the message box.

С уважением,
Евгений
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 05.09.09 11:22
Оценка:
"Webcoder75" <78993@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3527837@news.rsdn.ru...
> Здравствуйте, -prus-, Вы писали:
>
> P>Может сначала диагностировать, что устройство подключено и готово и только потом сплэш скрин показывать и грузить все остальное? А в случае если не готово показывать только MessageBox?
>
> Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..
MB_TOPMOST ?
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 05.09.09 12:07
Оценка:
Здравствуйте, Carc, Вы писали:


C>"Webcoder75" <78993@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3527837@news.rsdn.ru...

>> Здравствуйте, -prus-, Вы писали:
>>
>> P>Может сначала диагностировать, что устройство подключено и готово и только потом сплэш скрин показывать и грузить все остальное? А в случае если не готово показывать только MessageBox?
>>
>> Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..
C>MB_TOPMOST ?

Уже используется..См. исходный топик.
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 05.09.09 12:10
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, Webcoder75, Вы писали:


W>>Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..


P>Может тогда попробовать создавать MessageBox с типом MB_SETFOREGROUND? Так:


P>
P>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
P>                      MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
P>



P>

P>MB_SETFOREGROUND
P>The message box becomes the foreground window. Internally, the system calls the SetForegroundWindow function for the message box.


Нифига — ни MB_SETFOREGROUND один, ни в комбинации с MB_TOPMOST — не помогает нисколько..
Тестирую под Win7. Там еще ширина MessageBox уменьшилась очевидно, и по ширине она как раз меньше сплешскрина оказывается — полностью под ним (даже краешков не видно).

Есть ли еще какие идеи?
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 05.09.09 13:53
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Здравствуйте, -prus-, Вы писали:


P>>Здравствуйте, Webcoder75, Вы писали:


W>>>Там все так слишком замороченно, что такой вариант не подходит. Нужно именно показать сообщение поверх сплеш-скрина..


P>>Может тогда попробовать создавать MessageBox с типом MB_SETFOREGROUND? Так:


P>>
P>>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
P>>                      MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
P>>



P>>

P>>MB_SETFOREGROUND
P>>The message box becomes the foreground window. Internally, the system calls the SetForegroundWindow function for the message box.


W>Нифига — ни MB_SETFOREGROUND один, ни в комбинации с MB_TOPMOST — не помогает нисколько..

W>Тестирую под Win7. Там еще ширина MessageBox уменьшилась очевидно, и по ширине она как раз меньше сплешскрина оказывается — полностью под ним (даже краешков не видно).

W>Есть ли еще какие идеи?


В общем, будем следовать другим путем, спасибо за советы.
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re: ShowMessage со стилем WS_POPUP как сделать?
От: plastictown Норвегия  
Дата: 05.09.09 14:28
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Есть прога, она показывает по центу экрана сплеш-скрин при старте (как окно, со стилем WS_POPUP). При запуске прога также запускает еще один процесс.


W>Если в порожденном процессе чего-то нехватает, то он о этом сообщает юзеру вызывая

W>
W>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
W>                      MB_ICONINFORMATION|MB_TOPMOST);
W>

W>(и пока юзер не ткнет ОК, работу не продолжает).

W>Проблема в том, что в иногда в некоторых виндах (кажется в висте и семерке, но иногда и в XP бьвает) сплеш скрин перекрывает то сообщение об ошибке, юзер его не замечает (несмотря на то, что в таскбаре новое окно появляется), и юзер жалуется что прога зависла.


W>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


W>Спасибо заранее за ответы!


Кажись в MessageBox первым аргументом можно передать хэндл на сплэш.
Re[6]: ShowMessage со стилем WS_POPUP как сделать?
От: -prus-  
Дата: 05.09.09 16:35
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>В общем, будем следовать другим путем, спасибо за советы.


Еще можно попробовать, если знаешь HWND окна сплэш скрина, послать ему в случае ошибки WM_CLOSE и после этого показывать MessageBox.
С уважением,
Евгений
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: Webcoder75 http://crowd-works.com
Дата: 06.09.09 06:36
Оценка:
Здравствуйте, plastictown, Вы писали:


W>>Спасибо заранее за ответы!


P>Кажись в MessageBox первым аргументом можно передать хэндл на сплэш.


Сплеш в другом процессе рисуется. Поэтому думаю не сработает..

Еще я пробовал создавать невидимое окно класса WS_POPUP (или как-то так), и указывать его родителем MessageBox — нифига не помогает.
http://www.Crowd-Works.com — Опроси буржуев про сайт, слоган, название, лого своего продукта за копейки
Re: ShowMessage со стилем WS_POPUP как сделать?
От: Pavel Dvorkin Россия  
Дата: 07.09.09 04:52
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


А если просто предложить сплешу закрыться (WM_CLOSE ему послать) ? Тогда MB и окажется поверх
With best regards
Pavel Dvorkin
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: Мизантроп  
Дата: 07.09.09 05:42
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Здравствуйте, plastictown, Вы писали:



W>>>Спасибо заранее за ответы!


P>>Кажись в MessageBox первым аргументом можно передать хэндл на сплэш.


W>Сплеш в другом процессе рисуется. Поэтому думаю не сработает..


W>Еще я пробовал создавать невидимое окно класса WS_POPUP (или как-то так), и указывать его родителем MessageBox — нифига не помогает.


Попробуйте приаттачить поток, показывающий сплеш, к гланому потоку запускаемого приложения (AttachThreadInput)
"Нормальные герои всегда идут в обход!"
Re: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 08.09.09 21:41
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


Во-первых, не надо помещать сплеш-скрин в позицию HWND_TOPMOST, и соответственно, не назначать ему стиль WS_EX_TOPMOST при создании.
Потому что он будет задалбывать пользователя не только с твоим месседж-боксом, но и с чужими.
Достаточно, если сплеш-скрин будет изначально помещён в позицию HWND_TOP — поверх тех окон, которые были в момент его возникновения. А кто потом сверху выпрыгнет — так тому и быть.

Во-вторых, даже посторонний процесс может надругаться над чужими окнами, изменив их стиль и позицию.
Но это, скорее, хак.
Перекуём баги на фичи!
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 08.09.09 23:48
Оценка:
Здравствуйте, Webcoder75, Вы писали:

P>>Кажись в MessageBox первым аргументом можно передать хэндл на сплэш.


W>Сплеш в другом процессе рисуется. Поэтому думаю не сработает..


Тут "думать" мало, тут надо было пробовать, как советовал plastictown.
Почитайте про взаимотношения окон owner/owned (кто там над кем итд).
(Поимейте также в виду SetWindowPos).

W>Еще я пробовал создавать невидимое окно класса WS_POPUP (или как-то так), и указывать его родителем MessageBox — нифига не помогает.


Ну, еще бы
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 00:01
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Во-первых, не надо помещать сплеш-скрин в позицию HWND_TOPMOST, и соответственно, не назначать ему стиль WS_EX_TOPMOST при создании.

К>Потому что он будет задалбывать пользователя не только с твоим месседж-боксом, но и с чужими.
К>Достаточно, если сплеш-скрин будет изначально помещён в позицию HWND_TOP — поверх тех окон, которые были в момент его возникновения. А кто потом сверху выпрыгнет — так тому и быть.

Совет заведомо неважнецкий.
Ибо такой сплеш заведомо окажется под уже существующими topmost-окнами, например — под тултипами, что смотрится препротивно.
Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 04:32
Оценка:
Здравствуйте, Мизантроп, Вы писали:

М>Попробуйте приаттачить поток, показывающий сплеш, к гланому потоку запускаемого приложения (AttachThreadInput)


Сами-то пробовали (с той же целью) ?

P.S. [offtop]
>"Чем лучше я узнаю людей, тем больше я люблю собак" © Брижит Бардо

Уверены в © ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: Мизантроп  
Дата: 09.09.09 09:27
Оценка:
Здравствуйте, kero, Вы писали:

М>>Попробуйте приаттачить поток, показывающий сплеш, к гланому потоку запускаемого приложения (AttachThreadInput)


K>Сами-то пробовали (с той же целью) ?


Нет, я фигнёй с topmost сплэшами не страдаю. А что?

K>P.S. [offtop]

>>"Чем лучше я узнаю людей, тем больше я люблю собак" © Брижит Бардо

K>Уверены в © ?


Вас это беспокоит? Ну так не чешите.
Во чудо-то
"Нормальные герои всегда идут в обход!"
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 10:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Webcoder75, Вы писали:


W>>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


К>Во-первых, не надо помещать сплеш-скрин в позицию HWND_TOPMOST, и соответственно, не назначать ему стиль WS_EX_TOPMOST при создании.

К>Потому что он будет задалбывать пользователя не только с твоим месседж-боксом, но и с чужими.
К>Достаточно, если сплеш-скрин будет изначально помещён в позицию HWND_TOP — поверх тех окон, которые были в момент его возникновения. А кто потом сверху выпрыгнет — так тому и быть.
Абсолютно согласен. В идеале нужно убрать со сплеша HWND_TOPMOST, это моветон так делать.

Пример: частенько при запуске Винды ручками стартую сразу пяток приложений, у иж не помню точно кто (по моему какая-та старая версия The Bat) вешал свой сплеш как раз TOPMOST, при этом под ним оказывался тот же незабвенный Аутлук со своим вечно-дурацким MessageBox "Подключаться ли к сети". И вместо того чтобы кликнуть по MessageBox был вынужден постоянно любоваться на абсолютно бессмысленный сплеш Бата, с номером версии и прочим *ерьмом, которое уже наизусть знаю. Причем никакой другой инфы в нем нет. А инициализировался Бат не быстро (база была забита письмами).
Ну и на кой такое Г? В конце концов можно поставить WS_EX_TOPMOST сплешу в создании, а WM_SHOWWINDOW его тут же снять.

Имхо, Кодт прав — если есть возможность, надо убирать HWND_TOPMOST у сплеша.
Ну или прям не знаю — может попробовать дать возможность отвечать кнопками Да\Нет и.т.д. прямо в сплеше, ну что-то вроде встроенного WS_CHILD диалога туда впихнуть, и показывать когда надо!?!
Aml Pages Home
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 11:27
Оценка:
Здравствуйте, Кодт, Вы писали:

K>>Ибо такой сплеш заведомо окажется под уже существующими topmost-окнами, например — под тултипами, что смотрится препротивно.


К>Зато юзабельный.


К>Кроме того, нефиг окнам неактивного приложения быть топмост.

К>Обычно бесприютные тултипы — это следствие замёрзшего или зависшего приложения. Они в любом случае смотрятся препротивно.
К>А если это какое-то полезное топмост окошко (ну там, не знаю, виджет буфера обмена), то прятать его — подлянка.

Тем не менее — именно сплэш в исходном вопросе, а смысл сплэша-экрана — появиться (на некоторое время) поверх остальных окон.
Про подлянку же — из другой оперы

K>>Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту


К>Поскольку парентом попапов выступает десктоп, мы получаем ровно то поведение, которое нам нужно


Отнюдь.
Еще раз: HWND_TOP в случае top-level окон (т.е. в случае десктопа как парента) поместит окно ниже низшего topmost окна,
тогда как для child окон (рядового parent окна) HWND_TOPMOST попросту не работает.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 11:33
Оценка:
Здравствуйте, Carc, Вы писали:

C>Ну или прям не знаю — может попробовать дать возможность отвечать кнопками Да\Нет и.т.д. прямо в сплеше, ну что-то вроде встроенного WS_CHILD диалога туда впихнуть, и показывать когда надо!?!


Это было бы самым правильным — снабдить сплеш-скрин функцией самозахлопывания, да уж больно некрасиво и неочевидно для пользователя.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[3]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 11:38
Оценка:
Здравствуйте, Carc, Вы писали:

C>Абсолютно согласен. В идеале нужно убрать со сплеша HWND_TOPMOST, это моветон так делать.


C>Пример: частенько при запуске Винды ручками стартую сразу пяток приложений, у иж не помню точно кто (по моему какая-та старая версия The Bat) вешал свой сплеш как раз TOPMOST, при этом под ним оказывался тот же незабвенный Аутлук со своим вечно-дурацким MessageBox "Подключаться ли к сети". И вместо того чтобы кликнуть по MessageBox был вынужден постоянно любоваться на абсолютно бессмысленный сплеш Бата, с номером версии и прочим *ерьмом, которое уже наизусть знаю. Причем никакой другой инфы в нем нет. А инициализировался Бат не быстро (база была забита письмами).

C>Ну и на кой такое Г? В конце концов можно поставить WS_EX_TOPMOST сплешу в создании, а WM_SHOWWINDOW его тут же снять.

C>Имхо, Кодт прав — если есть возможность, надо убирать HWND_TOPMOST у сплеша.

C>Ну или прям не знаю — может попробовать дать возможность отвечать кнопками Да\Нет и.т.д. прямо в сплеше, ну что-то вроде встроенного WS_CHILD диалога туда впихнуть, и показывать когда надо!?!

Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 11:48
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Carc, Вы писали:


C>>Ну или прям не знаю — может попробовать дать возможность отвечать кнопками Да\Нет и.т.д. прямо в сплеше, ну что-то вроде встроенного WS_CHILD диалога туда впихнуть, и показывать когда надо!?!


К>Это было бы самым правильным — снабдить сплеш-скрин функцией самозахлопывания, да уж больно некрасиво и неочевидно для пользователя.

Жирными таким БОЛЬШИМИ такими букафками на сплеше написать "Кликните чтобы закрыть". И любой клик по сплешу его и закрывает. (Иногда так в About делают, тот же Бат кстати).
Костыль конечно — но все же!?!
Aml Pages Home
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 11:49
Оценка:
[skip]

K>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?

Да вроде где-то выше "мелькало" что сплеш в одном процессе, а MessageBox из другого...
Aml Pages Home
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 11:51
Оценка:
Здравствуйте, Carc, Вы писали:

C>[skip]


K>>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?

C>Да вроде где-то выше "мелькало" что сплеш в одном процессе, а MessageBox из другого...

И что?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 11:55
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, Кодт, Вы писали:


K>>>Ибо такой сплеш заведомо окажется под уже существующими topmost-окнами, например — под тултипами, что смотрится препротивно.


К>>Зато юзабельный.


К>>Кроме того, нефиг окнам неактивного приложения быть топмост.

К>>Обычно бесприютные тултипы — это следствие замёрзшего или зависшего приложения. Они в любом случае смотрятся препротивно.
К>>А если это какое-то полезное топмост окошко (ну там, не знаю, виджет буфера обмена), то прятать его — подлянка.

K>Тем не менее — именно сплэш в исходном вопросе, а смысл сплэша-экрана — появиться (на некоторое время) поверх остальных окон.

K>Про подлянку же — из другой оперы
А вот и фиг! Смысл сплеша показать что мол "не ?сыте, чуваки, мы работаем, запущаемся малёхо", то бишь показать что угу, мол, идет инциализация, ничего не висит. Продемонстрировать быстрый отклик на действия пользователя. А если в конце концов вся эта "украшательная муть" со сплешом приводит к обратному результату, именно что вроде как висит, то это не сплеш, это "шняга-скрин"

K>>>Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту


К>>Поскольку парентом попапов выступает десктоп, мы получаем ровно то поведение, которое нам нужно


K>Отнюдь.

K>Еще раз: HWND_TOP в случае top-level окон (т.е. в случае десктопа как парента) поместит окно ниже низшего topmost окна,
K>тогда как для child окон (рядового parent окна) HWND_TOPMOST попросту не работает.
Ну как вариант, создать окно сплеша с WS_EX_TOPMOST, и невидимым, на WM_SHOWWINDOW снять стиль WS_EX_TOPMOST (да хоть по таймеру через секунду). Оно тогда вроде как и мелькнет, и проблемы нет!?!
Так не подойдет?
Aml Pages Home
Re[6]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 11:56
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, Carc, Вы писали:


C>>[skip]


K>>>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?

C>>Да вроде где-то выше "мелькало" что сплеш в одном процессе, а MessageBox из другого...

K>И что?

А что пройдет такой вариант? (без подколки, мне действительно интересно).
Если да, то в какой-нить Виста проблем не будет?
Aml Pages Home
Re[6]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 12:08
Оценка:
Здравствуйте, Carc, Вы писали:

K>>Про подлянку же — из другой оперы

C>А вот и фиг! Смысл сплеша показать что мол "не ?сыте, чуваки, мы работаем, запущаемся малёхо", то бишь показать что угу, мол, идет инциализация, ничего не висит. Продемонстрировать быстрый отклик на действия пользователя. А если в конце концов вся эта "украшательная муть" со сплешом приводит к обратному результату, именно что вроде как висит, то это не сплеш, это "шняга-скрин"

Это вы вроде как в открытую дверь ломитесь На то и сплэш, что — временное окно.

K>>>>Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту


К>>>Поскольку парентом попапов выступает десктоп, мы получаем ровно то поведение, которое нам нужно


K>>Отнюдь.

K>>Еще раз: HWND_TOP в случае top-level окон (т.е. в случае десктопа как парента) поместит окно ниже низшего topmost окна,
K>>тогда как для child окон (рядового parent окна) HWND_TOPMOST попросту не работает.
C>Ну как вариант, создать окно сплеша с WS_EX_TOPMOST, и невидимым, на WM_SHOWWINDOW снять стиль WS_EX_TOPMOST (да хоть по таймеру через секунду). Оно тогда вроде как и мелькнет, и проблемы нет!?!
C>Так не подойдет?

Т.е. вы полагаете, что owner-ом может быть окно только из того же процесса, что и owned ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 12:10
Оценка:
Здравствуйте, kero, Вы писали:

K>Еще раз: HWND_TOP в случае top-level окон (т.е. в случае десктопа как парента) поместит окно ниже низшего topmost окна,

K>тогда как для child окон (рядового parent окна) HWND_TOPMOST попросту не работает.

Угу, устранил пробел в своих познаниях.
Тогда просто SetForegroundWindow.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[7]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 12:12
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, Carc, Вы писали:


K>>>Про подлянку же — из другой оперы

C>>А вот и фиг! Смысл сплеша показать что мол "не ?сыте, чуваки, мы работаем, запущаемся малёхо", то бишь показать что угу, мол, идет инциализация, ничего не висит. Продемонстрировать быстрый отклик на действия пользователя. А если в конце концов вся эта "украшательная муть" со сплешом приводит к обратному результату, именно что вроде как висит, то это не сплеш, это "шняга-скрин"

K>Это вы вроде как в открытую дверь ломитесь На то и сплэш, что — временное окно.

Причем тут "открытая дверь"? Чего-то не понял намека!?! О чем речь? Я же о проблеме в общем плане, но в конкретном случае, а вовсе не о терминологии?

K>>>>>Кроме того, HWND_TOP/HWND_BOTTOM — это для sibling окон, являющимися child для общего parent-окна. По моему опыту


К>>>>Поскольку парентом попапов выступает десктоп, мы получаем ровно то поведение, которое нам нужно


K>>>Отнюдь.

K>>>Еще раз: HWND_TOP в случае top-level окон (т.е. в случае десктопа как парента) поместит окно ниже низшего topmost окна,
K>>>тогда как для child окон (рядового parent окна) HWND_TOPMOST попросту не работает.
C>>Ну как вариант, создать окно сплеша с WS_EX_TOPMOST, и невидимым, на WM_SHOWWINDOW снять стиль WS_EX_TOPMOST (да хоть по таймеру через секунду). Оно тогда вроде как и мелькнет, и проблемы нет!?!
C>>Так не подойдет?

K>Т.е. вы полагаете, что owner-ом может быть окно только из того же процесса, что и owned ?

Я не полагаю, я об это впрямую спросил в соседнем посте
Автор: Carc
Дата: 09.09.09
.
Aml Pages Home
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 12:17
Оценка:
Здравствуйте, Carc, Вы писали:

К>>Это было бы самым правильным — снабдить сплеш-скрин функцией самозахлопывания, да уж больно некрасиво и неочевидно для пользователя.

C>Жирными таким БОЛЬШИМИ такими букафками на сплеше написать "Кликните чтобы закрыть". И любой клик по сплешу его и закрывает. (Иногда так в About делают, тот же Бат кстати).
C>Костыль конечно — но все же!?!

Дык некрасиво. И боюсь, красивого решения здесь просто нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[7]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 12:22
Оценка:
Здравствуйте, kero, Вы писали:

K>Это вы вроде как в открытую дверь ломитесь На то и сплэш, что — временное окно.


Нет ничего более постоянного, чем временное.

А если во время этого временного окна приложение захотело чего-то спросить-сказать?
Неважно — в этом же процессе, в чужом процессе... Хотя межпроцессный барьер добавляет мороки в изобретании костылей.

Проблема в том, что в иногда в некоторых виндах (кажется в висте и семерке, но иногда и в XP бьвает) сплеш скрин перекрывает то сообщение об ошибке, юзер его не замечает (несмотря на то, что в таскбаре новое окно появляется), и юзер жалуется что прога зависла.


Так что не в открытую дверь ломимся, а в крепко заколоченное окно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[8]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 12:25
Оценка:
Здравствуйте, Carc, Вы писали:

C>Я не полагаю, я об это впрямую спросил в соседнем посте
Автор: Carc
Дата: 09.09.09
.


Виноват, когда отвечал на ваше предыдущее, еще не читал ваше последующее

Ну, если вдруг в Висте или в 7-ке это не так — значит, там порушено одно из определяющих свойств отношений owner/owned.
Думаю — это вряд ли (хотя ни Висту, ни 7-ку сам еще не трогал)...

Для скоростной проверки могу предложить свою поделку: ParentOwner
Автор: kero
Дата: 05.08.07
.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[8]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 12:25
Оценка:
Здравствуйте, ononim, Вы писали:

K>>>>>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?

C>>>>Да вроде где-то выше "мелькало" что сплеш в одном процессе, а MessageBox из другого...
K>>>И что?
C>>А что пройдет такой вариант? (без подколки, мне действительно интересно).
C>>Если да, то в какой-нить Виста проблем не будет?
O>Все будет хорошо.
Хм... не знал. Век живи, век учись! СПАСИБО!
А есть какие-нибудь подводные камни?
Aml Pages Home
Re[9]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.09.09 12:27
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, Carc, Вы писали:


C>>Я не полагаю, я об это впрямую спросил в соседнем посте
Автор: Carc
Дата: 09.09.09
.


K>Виноват, когда отвечал на ваше предыдущее, еще не читал ваше последующее


K>Ну, если вдруг в Висте или в 7-ке это не так — значит, там порушено одно из определяющих свойств отношений owner/owned.

K>Думаю — это вряд ли (хотя ни Висту, ни 7-ку сам еще не трогал)...

K>Для скоростной проверки могу предложить свою поделку: ParentOwner
Автор: kero
Дата: 05.08.07
.

Сенкс, но это не ко мне. Ни Висты, ни 7-ки под рукой нет. Народ, может кто проверит?
Aml Pages Home
Re[4]: ShowMessage со стилем WS_POPUP как сделать?
От: Кодт Россия  
Дата: 09.09.09 12:27
Оценка:
Здравствуйте, kero, Вы писали:

K>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?


Усложнением не подходит.
Тебе нужно из процесса Б просечь, что запущен процесс А и у него есть окно (сплеш-скрин), и успеть прицепиться к этому окну.
А затем из процесса А — не убиваться, пока процесс Б не отцепил свои дочерние окна (месседж-боксы).
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[5]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 09.09.09 12:58
Оценка:
Здравствуйте, Кодт, Вы писали:

K>>Еще раз: а чем (в задаче ТС) не подходит MessageBox со сплэшем-owner-ом, — т.е. заведомо над сплэшем?


К>Усложнением не подходит.


Усложнением чего ? Пока не вижу какого-то иного внятного решения (чтобы со сплэшем итд).

Кстати, могу подкинуть и еще вариант с усложнением: хук на создание (не-owned) MessageBox с подменой DlgProc, чтобы поддерживал себя на самом топе, пока треба.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: ShowMessage со стилем WS_POPUP как сделать?
От: kero Россия  
Дата: 10.09.09 01:17
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Усложнением не подходит.

К>Тебе нужно из процесса Б просечь, что запущен процесс А и у него есть окно (сплеш-скрин), и успеть прицепиться к этому окну.

Что же здесь сложного (тем более, что процессы А и Б сам ТС и запускает) ?

К>А затем из процесса А — не убиваться, пока процесс Б не отцепил свои дочерние окна (месседж-боксы).


А вот тут есть занятный момент.

MSDN/Window Features/Owned Windows:
(1)
> An owned window is always above its owner in the z-order.
(2)
> The system automatically destroys an owned window when its owner is destroyed.
(3)
> An owned window is hidden when its owner is minimized.

Так вот: "не убиваться из процесса А, пока процесс Б не отцепил свои дочерние окна" —
— при назначении на роль owner-а окна из другого процесса —
— незачем, ибо в этом случае фича №2 отменяется!
Ага, строго говоря — ну не совсем канонический у нас owner в этом случае,
однако фича №1 (как и №3) остается в силе, а именно она-то нам и нужна

---
Что касается сплэша, то по-моему — тут мы попросту оказались в перпендикуляре:
kero исходил из того, что сплэш как таковой есть условие задачи и точка, а Кодт и Carc стояли на том, что сплэш плох сам по себе, — не так ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re: ShowMessage со стилем WS_POPUP как сделать?
От: Владислав Курмаз Украина http://tis-method.org/
Дата: 10.09.09 06:53
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>Есть прога, она показывает по центу экрана сплеш-скрин при старте (как окно, со стилем WS_POPUP). При запуске прога также запускает еще один процесс.


W>Если в порожденном процессе чего-то нехватает, то он о этом сообщает юзеру вызывая

W>
W>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
W>                      MB_ICONINFORMATION|MB_TOPMOST);
W>

W>(и пока юзер не ткнет ОК, работу не продолжает).

W>Проблема в том, что в иногда в некоторых виндах (кажется в висте и семерке, но иногда и в XP бьвает) сплеш скрин перекрывает то сообщение об ошибке, юзер его не замечает (несмотря на то, что в таскбаре новое окно появляется), и юзер жалуется что прога зависла.


W>Вопрос — как сделать чтобы онкно, созданное MessageBox оказалось ПОВЕРХ сплеш скрина? Если c MessageBox это невозможно, тогда как сообщить юзеру о проблеме чтобы гарантировано сообщение оказалось поверх сплеш скрина?


W>Спасибо заранее за ответы!


Здравствуйте.
Вот моё предложение:
1. Создаём именованное событие для идентификации ошибки инициализации.
2. В процессе, который изначально выводил MsgBox, устанавливаем его при возникновении ошибки и закрываемся.
3. В процессе со сплешем ожитаем это событие ( по таймеру или в отдельном утилитном потоке ) и при срабатывании выводим MsgBox с установленным в сплеш парентом.
Re[7]: ShowMessage со стилем WS_POPUP как сделать?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 10.09.09 07:58
Оценка:
[поскипано]
K>---
K>Что касается сплэша, то по-моему — тут мы попросту оказались в перпендикуляре:
K>kero исходил из того, что сплэш как таковой есть условие задачи и точка, а Кодт и Carc стояли на том, что сплэш плох сам по себе, — не так ?
Хм, нет! Не так.
TC куда-то запропастился... Тут нужно сразу определиться если возможность менять код сплеша? Если есть — надо менять, ну *авно ситуация по юзабилити, по сути своей *авно. Нужно переделывать. Вот выше писал про проблему с TopMost сплеша у Бата
Автор: Carc
Дата: 09.09.09
. Ну дык так оно и есть — именно Батова работа. Ох и достал он перекрывать вопрошающий Аутлук
Какая разница-то!?! Ну с соседним процессом TC, хитрости с MessageBox работать будут, а с другими?
Другой разговор, если код сплеша менять нельзя... Тут уже придется шаманить.
А завязки с HWND окна соседнего процесса... ну Кодт прав — усложнение это. Ну да, ну да — сделать можно, ловкость рук и никакого мошенства, только зачем прикручивать такой уж "хитрый" костыль!?! Может действительно просто найти окно сплеша и мрачно сбросить ему HWND_TOPMOST?
В общем, ключевой вопрос: можно ли менять код сплеша?
Aml Pages Home
Re[10]: ShowMessage со стилем WS_POPUP как сделать?
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 10.09.09 16:46
Оценка:
Здравствуйте, Carc, Вы писали:

C>Сенкс, но это не ко мне. Ни Висты, ни 7-ки под рукой нет. Народ, может кто проверит?


Я пользуюсь Win7 Ultimate x64. Что именно надо проверить?
[КУ] оккупировала армия.
Re: ShowMessage со стилем WS_POPUP как сделать?
От: maxlosyam Россия  
Дата: 11.09.09 14:15
Оценка:
Здравствуйте, Webcoder75, Вы писали:

W>
W>    MessageBox(NULL,"Device not ready. Please attach it and click OK","Not ready!", MB_OK |
W>                      MB_ICONINFORMATION|MB_TOPMOST);
W>


чет нафлужено, все нечитал, попробуйте поиграться с флагами
MB_APPLMODAL
MB_SYSTEMMODAL
MB_TASKMODAL
ченить да поможет, али любой поможет
вообще по идее MB_APPLMODAL уже должен решить проблемму.
Re[2]: ShowMessage со стилем WS_POPUP как сделать?
От: ononim  
Дата: 11.09.09 14:43
Оценка:
M>MB_APPLMODAL
M>MB_SYSTEMMODAL
M>MB_TASKMODAL
M>ченить да поможет, али любой поможет
M>вообще по идее MB_APPLMODAL уже должен решить проблемму.
А если будет 2 MB_APPLMODAL диалога?
Вообще надо отучиваться от мнения что ваша прога самая главная у юзера. У среднего юзера в автозапуске с десяток софтин и если они начнут сплэши показывать... Я бы просто тупо грохнул мешающую прогу или написал бы софтину которая будет гасить ее сплэш если очень нужна именно эта прога.
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.