MsgBox with Timer

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

MsgBox with Timer

Сообщение HiMik2003 » 16.06.2005 (Чт) 10:55

Пример создания MsgBox'a с обратным отсчётом и автоматическим закрытием через определённое время.

За основу взял пример, который нашёл на исходники.ру, но доработал его,сделав отображение на
кнопке, которая должна сработать по таймеру, счётчика обратного отсчёта.
Можно найти хендлер окна и кнопки (это я тоже доработал), но есть проблема, которую пока не могу решить - если есть другой MsgBox с таким же заголовком и он в данный момент активен - то закроется он.
Подробности - смотрите в примере.
Помогите, кто чем может!
Вообще-то я считаю, что проще и безопаснее делать своё диалоговое окно и не использовать в данной ситуации MsgBox.
Однако данный пример может пригодится и для ухаживания за чужими окнами :)
Вложения
MessageBox with Timer.rar
(11.27 Кб) Скачиваний: 28

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 16.06.2005 (Чт) 11:13

Ты ведь сам объявил GetAncestor :!: Ну так и проверяй им твоё окно вызвало этот MessageBox или нет :D
З.Ы.: Я бы через MsgBox не делал , а сделал бы через MessageBox или MessageBoxEx
Если всё делать своими ручками, они скоро отвалятся !

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Сообщение HiMik2003 » 16.06.2005 (Чт) 13:49

Kovu писал(а):Ты ведь сам объявил GetAncestor :!: Ну так и проверяй им твоё окно вызвало этот MessageBox или нет :D
З.Ы.: Я бы через MsgBox не делал , а сделал бы через MessageBox или MessageBoxEx


Это не имеет значения. Система всё равно отсылает клавиатурное сообщение foreground приложению, а для информации дает ещё хендлер окна. Я знаю хендлер кнопки, я могу поменять текст кнопки, но я не могу нажать эту кнопку, если активно другое приложение, т.к. оно получает весь фокус!!!

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 16.06.2005 (Чт) 14:23

А ты не балуйся с SendKeys а пошли нормальное сообщение Msgboxy:
SendMessage hwndmsg,&h10,0,0. :lol: :lol: :lol: Лично я ни разу не хотел закрывать через SendKeys :twisted:
Если всё делать своими ручками, они скоро отвалятся !

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.06.2005 (Чт) 14:27

2 HiMik2003

Ха! Ты тоже с Кишинёва! Это есть хорошо :)
Сообщи мне в ЛС свой телефон хоть для связи...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Сообщение HiMik2003 » 16.06.2005 (Чт) 18:03

Kovu писал(а):А ты не балуйся с SendKeys а пошли нормальное сообщение Msgboxy:
SendMessage hwndmsg,&h10,0,0. :lol: :lol: :lol: Лично я ни разу не хотел закрывать через SendKeys :twisted:


Насколько я разобрался сообщение всё равно идёт не в моё background-приложение а в foreground-приложение :(

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.06.2005 (Чт) 20:53

HiMik2003 писал(а):
Kovu писал(а):А ты не балуйся с SendKeys а пошли нормальное сообщение Msgboxy:
SendMessage hwndmsg,&h10,0,0. :lol: :lol: :lol: Лично я ни разу не хотел закрывать через SendKeys :twisted:


Насколько я разобрался сообщение всё равно идёт не в моё background-приложение а в foreground-приложение :(

Сообщение идёт куда нужно, просто оно не то :-)
Нужно слать не WM_CLOSE, а WM_COMMAND с BN_CLICKED. Или BM_CLICK на нужную кнопку.
Изображение

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

2 tyomitch

Сообщение HiMik2003 » 17.06.2005 (Пт) 9:28

2 tyomitch

Болшое спасибо за помощь, наконец-то заработало!
Сначала делаем:
Код: Выделить всё
SetActiveWindow hMessageBox


и потом:
Код: Выделить всё
SendMessage hButton, BM_CLICK, 0, ByVal 0

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: 2 tyomitch

Сообщение tyomitch » 17.06.2005 (Пт) 10:31

HiMik2003 писал(а):Болшое спасибо за помощь, наконец-то заработало!
Сначала делаем:
Код: Выделить всё
SetActiveWindow hMessageBox


Вот это - совершенно незачем, можно убрать.
Изображение

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Сообщение HiMik2003 » 17.06.2005 (Пт) 11:18

Подкорректировал пример, выкладываю финальную версию.
Вложения
MessageBox with Timer Final.rar
Final, I hope
(4 Кб) Скачиваний: 49

HiMik2003
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 21.07.2003 (Пн) 11:32
Откуда: Кишинёв

Re: 2 tyomitch

Сообщение HiMik2003 » 17.06.2005 (Пт) 11:20

tyomitch писал(а):
HiMik2003 писал(а):Болшое спасибо за помощь, наконец-то заработало!
Сначала делаем:
Код: Выделить всё
SetActiveWindow hMessageBox


Вот это - совершенно незачем, можно убрать.


Я исходил из MSDN (BM_CLICK):

Remarks
If the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before sending the BM_CLICK message to the button.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 113

    TopList