Автор
|
Тема: WM_TIMER - Это глюк или баг?!?!?!
|
Kosha |
опубликован 09-04-2001 02:17 MSK
Народ, вот тут откопал фичу, до сих пор нервно хихикаю ;-). А фича такая: есть MDI-приложение (с другими пока не проверял, разницы вроде нет). В CMainFrame задаю хандлер для WM_TIMER. Так вот, помимо нормальных вызовов OnTimer, они вызываются, когда я (ВНИМАНИЕ!) ВОЖУ МЫШКОЙ ПО ЛЮБОМУ ТУЛБАРУ (включая панель задач, меню кнопки "Пуск" и т.д.). Кто-нить знает, как от этого избавиться?
|
OlegN
|
опубликован 09-04-2001 12:03 MSK
Чтобы избавить себя от нервного хихиканья достаточно вимательно прочитать документацию о сообщении 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
В том-то и дело, что МОЙ OnTimer вызывается с МОИМ nIDTimer, причем: Ну допустим тулбар моей проги может вызвать OnTimer. Но как в мою прогу с моим таймером вклинится тулбар около кнопки "Пуск"? |
OlegN
|
опубликован 09-04-2001 16:13 MSK
Поробуй изменить свой TimerID, может он совпадает с TimerID ToolTip контрола ? Кстати, на какой OS ты запускаешь прогу, если на Win 9x, то все могет быть... Даже того, чего быть не могет :-)) Если изменение TimerID не даст ничего хорошего, то отсеять свои вызовы таймера от чужих ты можешь при помощи GetTickCount, просто замеряешь интервалы между вызовами, если вызов произошел быстрее положенного, то просто его игнорируешь. Или попробуй использовать TimerCallback функцию. |
Kosha
|
опубликован 09-04-2001 21:16 MSK
Во-во! Вот я именно об этом. Интересно, но глюк проявляется где-то с интервалом обновления меньше 20-30. ПРИЧЕМ: GetTickCount с проверками всякими ТОЖЕ НЕ ПАШЕТ ;-)))) т.е. делаю глобальную переменную, в OnTimer проверяю GetTickCount() - %ее самую%, если меньше 10 - то выход, если больше/равно - обновить и выполнить основную часть. НО ОНА, (сволочь) ТАКАЯ, все равно ускоряется!!! |
OlegN
|
опубликован 10-04-2001 13:33 MSK
А ты что, запускаешь таймер на Win 9x с интервалом обновления меньше 20-30 мс. ? Так поиздеваться над системой !! А еще говорят Билл Гейтс, Билл Гейтс. Для таких задержек используется мультимедиа таймер, функции начинающиеся с time... timeBeginPeriod, timeSetEvent, timeGetTime и т.д. а также структуры MMTIME, TIMERCAPS |
Kosha
|
опубликован 10-04-2001 14:17 MSK
Прости засранца ;-)))))))))))))))))))))))) больше не буду ;-))))))))))))) |