Я поддерживаю приложение C ++, которое использует flash ocx для воспроизведения SWF-файла.
Когда пользователь нажимает на кнопку в SWF, внутренняя вспышка вызывает функцию WinAPI SetCursor
для установки курсора IDC_HAND
- я вижу, что когда я наблюдаю, как WinAPI вызывает функцию, связанную с курсором, через API Monitor V2 (rohitab.com) . Однако в моем случае курсор не меняется, то есть остается IDC_ARROW
.
Само приложение вообще не вызывает SetCursor
. Окно приложения обрабатывает сообщение WM_SETCURSOR
следующим образом, т.е. не восстанавливает курсор:
case WM_SETCURSOR:
{
static bool restoreCursor = false;
if (LOWORD(lParam) != HTCLIENT)
{
restoreCursor = true;
}
if (restoreCursor)
{
restoreCursor = false;
// DefWindowProc will set the cursor
break;
}
return 1;
}
Может кто-нибудь сообщить мне, кто может сбросить / изменить форму курсора в этом случае?
Обновление : Интересной является тот факт, что у меня есть 2 аналогичные установки, которые дают противоположные результаты.
Приложение, которое я поддерживаю, на самом деле устанавливает WH_GETMESSAGE
хук на «SysListView32» и запускает поток, который создает Flash player. Таким образом, установка не так проста.
Однако, если я просто создам простой пример, который создает проигрыватель на основном winmain, то приведенный выше код работает отлично, и курсор меняется.
Так что, похоже, что-то сбрасывает состояние курсора в первом случае. Как узнать что сбрасывает курсор ?