c++ - 悬停子窗口时更改光标

标签 c++ windows window mouse-cursor

我有一个要求登录名/密码的窗口,其中有五个子窗口:

  • 可编辑的:登录
  • 另一个可编辑的:密码
  • 确定按钮
  • “忘记密码”一个
  • 还有一个“注册”。

基本上,当您单击最后两个中的任何一个时,您将被带到一个网站,您可以在其中执行适当的操作。

一切都很好,但我很想知道如何检查(我猜有消息)鼠标光标是否悬停在两个链接之一上,如果是这种情况,请将其更改为手形光标。

我特别想知道如何检测它!我可以弄清楚如何使用 SetCursor 等来更改光标!

编辑:我实际上发现 WM_SETCURSOR 是一个非常容易处理的消息。基本上,您检查 wParam 是否等于它悬停在其上的子窗口的句柄,瞧!

但我实际上发现 SetCursor 是一个更大的问题。

这就是我所做的:

我的光标的声明:

static HCURSOR  hCursorHand;
static HCURSOR  hCursorArrow;

该值在此处设置(在 WM_CREATE 的句柄中):

hCursorHand = LoadCursor( NULL, IDC_HAND );
hCursorArrow = LoadCursor( NULL, IDC_ARROW );

这是我设置的地方:

else if (msg == WM_SETCURSOR)
{
    if ((HWND)wParam == hwndLinkFPasswd || (HWND)wParam == hwndLinkSignUp)
        SetCursor(hCursorHand);
    else
        SetCursor(hCursorArrow);
}

我知道光标已被正确检测到(谢谢断点),但它似乎没有做任何事情。光标保持箭头状态...

最佳答案

那么!正如我所说,我明白了! (我只是无法在前 8 小时内回答我的问题!)

这是我错过的:(对于有同样问题的人)

else if (msg == WM_SETCURSOR)
{
    if ((HWND)wParam == hwndLinkFPasswd || (HWND)wParam == hwndLinkSignUp)
    {
        SetCursor(hCursorHand);
        return(TRUE);
    }
}

我发现这个 API 的文档很糟糕,所以我希望我的贡献有一天能够帮助处于我这种情况的人! ;)

关于c++ - 悬停子窗口时更改光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220806/

相关文章:

windows - 使用 Windows 批处理文件在文本文件中添加新行

angularjs - 以编程方式打开新窗口(或新选项卡),而不是始终弹出窗口

javascript - 在窗口对象上调用 focus() 时遇到 IE11 问题

c++ - constexpr if 和返回值优化

c++ - 如何使用 coc-clangd/coc-nvim 手动(无需键绑定(bind))搜索源代码中的符号?

windows - 我应该为 Windows 选择 ActivePerl 还是 Strawberry Perl?

asp.net - 如何使用自托管 ASP.NET Core 2 应用程序 (httpsys) 进行 HTTPS (SSL)

vb6 - 在 VB6 中等待进程退出后恢复窗口

c++ - vector C++ 中的并行搜索

c++ - 替换字符串中的一些字符