我已经制作了一个应用程序,当鼠标悬停在静态控件上方时,需要将光标的外观更改为手,否则将其重置为普通光标.
我的初始应用程序是全屏模式,但最近条款已更改,并且必须具有可调整大小的窗口.
这意味着WM_SETCURSOR必须重写我的处理程序以反映新引入的更改.
游标被加载WM_CREATE,我已经定义了类游标,如下所示:
// cursors
case WM_CREATE:
hCursorHand = LoadCursor( NULL, IDC_HAND );
hCursorArrow = LoadCursor( NULL, IDC_ARROW );
// other stuff
Run Code Online (Sandbox Code Playgroud)
在我班上:
WNDCLASSEX wc;
// ...
wc.hCursor = hCursorArrow;
//...
Run Code Online (Sandbox Code Playgroud)
这是我的旧WM_CURSOR处理程序(为简化起见,代码已简化):
case WM_SETCURSOR:
if( (HWND)wParam == GetDlgItem( hwnd, 4000 ) )
SetCursor(hCursorHand);
else
SetCursor(hCursorArrow);
return TRUE;
Run Code Online (Sandbox Code Playgroud)
如果光标悬停在静态控件之上,那么我的处理程序将其更改为手动,否则将其设置为默认光标(箭头).
Bellow是我在Paint中绘制的图片,当它悬停在静态控件上方时显示所需的光标外观,它位于客户端区域,当用户调整窗口大小时.

如果需要额外的代码片段,请询问,我将编辑我的帖子,但是现在,它们被省略以保持帖子简洁明了.
我在Windows XP上工作,使用MS Visual Studio C++和纯Win32 API.
贝娄是我尝试过的代码片段,但它们都失败了:
第一个片段:
case WM_SETCURSOR:
if( (HWND)wParam == GetDlgItem( hwnd, 4000 ) )
{
SetCursor(hCursorHand);
return …Run Code Online (Sandbox Code Playgroud)