我维护一个使用 flash ocx 播放 SWF 文件的 C++ 应用程序。
当用户将鼠标悬停在 SWF 中的按钮上时,flash 在内部调用 WinAPISetCursor
函数来设置IDC_HAND
光标 - 我可以看到,当我通过API Monitor V2 (rohitab.com)监控 WinAPI 对光标相关函数的调用时。但是,在我的情况下,光标没有改变,即保持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 播放器的线程。所以设置并不是那么简单。
但是,如果我只是创建一个简单的示例,基本上在 winmain 上创建一个播放器,那么上面的代码可以完美运行并且光标会发生变化。
因此,在第一种情况下,某些东西似乎确实重置了光标状态。如何找出重置光标的原因?