在悬停子窗口时更改光标

时间:2013-11-26 15:09:49

标签: c++ windows window cursor mouse

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

  • 可编辑的一个:登录
  • 另一个可编辑的:密码
  • 确定按钮
  • “忘了密码”一个
  • 并且“注册”一个。

基本上,当您点击最后两个中的任何一个时,您将被发送到可以执行相应操作的网站。

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

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

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

但实际上我发现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);
}

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

1 个答案:

答案 0 :(得分:3)

原来如此!正如我所说,我想通了! (我在前8个小时内无法回答我的问题!)

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

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

我发现这个API的文档很糟糕,所以我希望有一天我的贡献会帮助我的人! ;)