WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как заставить всплывать MessageBox?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как заставить всплывать MessageBox?
server_mouse опубликован 17-08-2001 11:00 MSK   Click Here to See the Profile for server_mouse   Click Here to Email server_mouse  
MessageBox вызаваю из сервиса в отдельном потоке, и этот гад не всплывает! Остаётся на заднем плане!
Если ему указать MB_TOPMOST то при завершении потока через TerminateThread() бох остаётся жить...
Ок, извратнулся и передаю в бокс хэндл активного на данный момент окна. Бокс выводится модально, и исчезает если я делаю потоку TerminateThread(), но при таком завершении активное окно вообще перестаёт реагировать на события.

Можно ему указать какой-нибудь стиль, что бы он был немодальным?

AndreyAZA опубликован 17-08-2001 11:22 MSK     Click Here to See the Profile for AndreyAZA  Click Here to Email AndreyAZA     
А не проще написать собственный мини Msg?
Flex Ferrum опубликован 17-08-2001 11:58 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
А у тебя сервис под NT? Если да, то поставь ему фалаг "Interact with desctop" - и все будет работать.
server_mouse опубликован 17-08-2001 12:17 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
2Flex Ferrum: Флаг стоит, месаги выводятся. Фишка в том, что они либо не всплывают поверх др. окон, либо не закрываются при завершении потока их породившего.
m_fox опубликован 17-08-2001 18:06 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
Я выходил из подобног положения следующим образом:
из потока посылал сообщение активному окну, которое и показывало диалог.
server_mouse опубликован 17-08-2001 18:19 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
2m_fox: Ага, я тоже так делаю... Но что если юзер не нажал ничего на MessageBox-e? А я хочу убрать его через некоторое время. Завершение потока через TerminateThread() приводит к подвисанию процесса от имени которого ты вывел MB. Ж%) Почему-то....
m_fox опубликован 17-08-2001 18:25 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
Во-первых я делал не для MessageBox'а, а для своего диалога, который закрывался через post сообщение активному окну.
Во-вторых на sources видел класс, который реализует закрытие MessageBox'a через определенное время.
Так естественно идет подвисание, если ты делаешь SendMessage. Делай PostMessage
server_mouse опубликован 17-08-2001 18:42 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
>Во-первых я делал не для MessageBox'а, а для своего диалога...
Я тоже уже так сделал и форум продолжаю только из спортивного интереса, в поисках истины.

>Во-вторых на sources видел класс, который реализует закрытие...
Ага, я тоже видел. Но тот класс закрывает бокс примерно таким способом:
hwnd=FindWindow(ClassOfMesBox,CaptionOfMesBox);
PostMessage(hwnd,...);
Мне это принципиально не подходит, поскольку я не знаю заголовка моего бокса (CaptionOfMesBox), а закрывать все боксы мне кажется некорректным..

>Так естественно идет подвисание, если ты делаешь SendMessage.
>Делай PostMessage.
А почему естественно? SendMessage помещает в очередь, а PostMessage вызывает напрямую. Подумаешь, полежит моё сообщение в очереди, чего здесь такого? Или я не прав?

m_fox опубликован 17-08-2001 18:55 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
SendMessage не возвращает значение до тех пор, пока сообщение не обработано.
А PostMessage помещает в очередь и сразу выходит.
Хотя надо проверить: завершается ли функция в потоке SendMessage пока висит поток или нет?

>Так естественно идет подвисание, если ты делаешь SendMessage.
>Делай PostMessage.
А почему естественно? SendMessage помещает в очередь, а PostMessage вызывает напрямую. Подумаешь, полежит моё сообщение в очереди, чего здесь такого? Или я не прав?

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.