【发布时间】:2012-02-19 15:29:58
【问题描述】:
我维护一个使用 flash ocx 播放 SWF 文件的 C++ 应用程序。
当用户将鼠标悬停在 SWF 中的按钮上时,flash 在内部调用 WinAPI SetCursor 函数来设置 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 个相似的设置产生相反的结果。
我维护的应用程序实际上在“SysListView32”上安装了一个WH_GETMESSAGE 挂钩,并启动了一个创建Flash 播放器的线程。所以设置不是那么简单。
但是,如果我只是创建一个简单的示例,基本上在 winmain 上创建一个播放器,那么上面的代码可以完美运行并且光标会发生变化。
因此,在第一种情况下,似乎有些东西确实重置了光标状态。如何找出什么重置了光标?
【问题讨论】:
标签: c++ winapi cursor reset apimonitor