将光标悬停在子窗口上时更改光标

Change cursor when hovering a child window

本文关键字:光标 悬停 窗口      更新时间:2023-10-16

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

  • 可编辑:登录
  • 另一个可编辑的:密码
  • OK按钮
  • "忘记密码"
  • 还有一个"注册"

基本上,当你点击最后两个时,你会被发送到一个网站,在那里你可以执行适当的操作。

这一切都很好,但我很想知道如何检查(我想是通过消息)鼠标光标是否悬停在两个链接中的一个上,如果是这样的话,将其更改为手动光标。

我特别想知道如何检测它!之后我可以用SetCursor之类的方法来改变光标!

EDIT:事实上,我发现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的文档很糟糕,所以我希望有一天我的贡献能帮助到处于我这种情况的人!)