Автор
|
Тема: Как заставить всплывать MessageBox?
|
server_mouse |
опубликован 17-08-2001 11:00 MSK
MessageBox вызаваю из сервиса в отдельном потоке, и этот гад не всплывает! Остаётся на заднем плане! Если ему указать MB_TOPMOST то при завершении потока через TerminateThread() бох остаётся жить... Ок, извратнулся и передаю в бокс хэндл активного на данный момент окна. Бокс выводится модально, и исчезает если я делаю потоку TerminateThread(), но при таком завершении активное окно вообще перестаёт реагировать на события.Можно ему указать какой-нибудь стиль, что бы он был немодальным?
|
AndreyAZA
|
опубликован 17-08-2001 11:22 MSK
А не проще написать собственный мини Msg? |
Flex Ferrum
|
опубликован 17-08-2001 11:58 MSK
А у тебя сервис под NT? Если да, то поставь ему фалаг "Interact with desctop" - и все будет работать. |
server_mouse
|
опубликован 17-08-2001 12:17 MSK
2Flex Ferrum: Флаг стоит, месаги выводятся. Фишка в том, что они либо не всплывают поверх др. окон, либо не закрываются при завершении потока их породившего. |
m_fox
|
опубликован 17-08-2001 18:06 MSK
Я выходил из подобног положения следующим образом: из потока посылал сообщение активному окну, которое и показывало диалог. |
server_mouse
|
опубликован 17-08-2001 18:19 MSK
2m_fox: Ага, я тоже так делаю... Но что если юзер не нажал ничего на MessageBox-e? А я хочу убрать его через некоторое время. Завершение потока через TerminateThread() приводит к подвисанию процесса от имени которого ты вывел MB. Ж%) Почему-то.... |
m_fox
|
опубликован 17-08-2001 18:25 MSK
Во-первых я делал не для MessageBox'а, а для своего диалога, который закрывался через post сообщение активному окну. Во-вторых на sources видел класс, который реализует закрытие MessageBox'a через определенное время. Так естественно идет подвисание, если ты делаешь SendMessage. Делай PostMessage |
server_mouse
|
опубликован 17-08-2001 18:42 MSK
>Во-первых я делал не для MessageBox'а, а для своего диалога... Я тоже уже так сделал и форум продолжаю только из спортивного интереса, в поисках истины.>Во-вторых на sources видел класс, который реализует закрытие... Ага, я тоже видел. Но тот класс закрывает бокс примерно таким способом: hwnd=FindWindow(ClassOfMesBox,CaptionOfMesBox); PostMessage(hwnd,...); Мне это принципиально не подходит, поскольку я не знаю заголовка моего бокса (CaptionOfMesBox), а закрывать все боксы мне кажется некорректным.. >Так естественно идет подвисание, если ты делаешь SendMessage. >Делай PostMessage. А почему естественно? SendMessage помещает в очередь, а PostMessage вызывает напрямую. Подумаешь, полежит моё сообщение в очереди, чего здесь такого? Или я не прав? |
m_fox
|
опубликован 17-08-2001 18:55 MSK
SendMessage не возвращает значение до тех пор, пока сообщение не обработано. А PostMessage помещает в очередь и сразу выходит. Хотя надо проверить: завершается ли функция в потоке SendMessage пока висит поток или нет?>Так естественно идет подвисание, если ты делаешь SendMessage. >Делай PostMessage. А почему естественно? SendMessage помещает в очередь, а PostMessage вызывает напрямую. Подумаешь, полежит моё сообщение в очереди, чего здесь такого? Или я не прав?
|