gpt4 book ai didi

c++ - 除了 SetCursor,还有什么可以重置光标形状?

转载 作者:行者123 更新时间:2023-11-28 08:11:12 24 4
gpt4 key购买 nike

我维护一个使用 flash ocx 播放 SWF 文件的 C++ 应用程序。

当用户将鼠标悬停在 SWF 中的按钮上时,Flash 会在内部调用 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 个相似的设置却产生了相反的结果。

我维护的应用程序实际上在“SysListView32”上安装了一个 WH_GETMESSAGE Hook ,并启动了一个创建 Flash 播放器的线程。所以设置并不是那么简单。

但是,如果我只是创建一个简单的示例,基本上在 winmain 中创建一个播放器,那么上面的代码可以完美运行并且光标会发生变化。

所以在第一种情况下似乎确实有某些东西重置了光标状态。如何找出重置光标的原因

最佳答案

好的,这个问题的真正答案是非 GUI 线程不能直接改变光标。查看页面底部的评论 http://msdn.microsoft.com/en-us/library/windows/desktop/ms648393%28v=vs.85%29.aspx

另一种解决方案可以绕过/ Hook SetCursor 函数到我们的函数,它只向 GUI 线程发送用户消息,发出设置光标的信号。

这两种解决方案都有其优点,当然也有缺点。

关于c++ - 除了 SetCursor,还有什么可以重置光标形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com