相关疑难解决方法(0)

正确地在WM_SETCURSOR处理程序中重置游标

介绍及相关资料:

我已经制作了一个应用程序,当鼠标悬停在静态控件上方时,需要将光标的外观更改为手,否则将其重置为普通光标.

我的初始应用程序是全屏模式,但最近条款已更改,并且必须具有可调整大小的窗口.

这意味着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)

c++ winapi

5
推荐指数
1
解决办法
8927
查看次数

标签 统计

c++ ×1

winapi ×1