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++
  WM_TIMER - Это глюк или баг?!?!?!

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

Автор Тема:   WM_TIMER - Это глюк или баг?!?!?!
Kosha опубликован 09-04-2001 02:17 MSK   Click Here to See the Profile for Kosha   Click Here to Email Kosha  
Народ, вот тут откопал фичу, до сих пор нервно хихикаю ;-).
А фича такая: есть MDI-приложение (с другими пока не проверял, разницы вроде нет). В CMainFrame задаю хандлер для WM_TIMER.
Так вот, помимо нормальных вызовов OnTimer, они вызываются, когда я (ВНИМАНИЕ!)
ВОЖУ МЫШКОЙ ПО ЛЮБОМУ ТУЛБАРУ (включая панель задач, меню кнопки "Пуск" и т.д.).
Кто-нить знает, как от этого избавиться?
OlegN опубликован 09-04-2001 12:03 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Чтобы избавить себя от нервного хихиканья
достаточно вимательно прочитать документацию
о сообщении WM_TIMER. ToolTip control
также может посылать и ловить WM_TIMER для
показа hint-ов на ToolBar-e. Для того, чтобы
отличить свои вызвовы от чужих существует
timer identifier , который передается в
wParam переменной.

LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER
WPARAM wParam, // timer identifier
LPARAM lParam // timer callback (TIMERPROC)
);

Kosha опубликован 09-04-2001 14:01 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
В том-то и дело, что МОЙ OnTimer вызывается с МОИМ nIDTimer, причем:
Ну допустим тулбар моей проги может вызвать OnTimer. Но как в мою прогу с моим таймером вклинится тулбар около кнопки "Пуск"?
OlegN опубликован 09-04-2001 16:13 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Поробуй изменить свой TimerID,
может он совпадает с TimerID ToolTip контрола ? Кстати, на какой OS ты запускаешь
прогу, если на Win 9x, то все могет быть...
Даже того, чего быть не могет :-))
Если изменение TimerID не даст ничего хорошего, то отсеять свои вызовы таймера от чужих ты можешь при помощи GetTickCount,
просто замеряешь интервалы между вызовами,
если вызов произошел быстрее положенного,
то просто его игнорируешь.
Или попробуй использовать TimerCallback
функцию.
Kosha опубликован 09-04-2001 21:16 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Во-во! Вот я именно об этом.
Интересно, но глюк проявляется где-то с интервалом обновления меньше 20-30.
ПРИЧЕМ: GetTickCount с проверками всякими ТОЖЕ НЕ ПАШЕТ ;-))))
т.е. делаю глобальную переменную, в OnTimer проверяю GetTickCount() - %ее самую%, если меньше 10 - то выход, если больше/равно - обновить и выполнить основную часть.
НО ОНА, (сволочь) ТАКАЯ, все равно ускоряется!!!
OlegN опубликован 10-04-2001 13:33 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
А ты что, запускаешь таймер на Win 9x
с интервалом обновления меньше 20-30 мс. ?
Так поиздеваться над системой !!
А еще говорят Билл Гейтс, Билл Гейтс.
Для таких задержек используется
мультимедиа таймер, функции начинающиеся
с time...
timeBeginPeriod, timeSetEvent, timeGetTime
и т.д. а также структуры MMTIME, TIMERCAPS

Kosha опубликован 10-04-2001 14:17 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Прости засранца ;-))))))))))))))))))))))))
больше не буду ;-)))))))))))))

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


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.