easyx更改光标样式

用的是vs2022和easyx2022,想要实现更改鼠标光标的效果,但是这段代码运行之后没有任何变化,请问是怎么回事呢


```c++
#include
#include
#include
#include
#include 
#include//EasyX 图像库头文件,用于绘图、鼠标操作、键盘操作等功能
#include//包含多媒体设备接口头文件
#include
#include
#pragma comment(lib,"winmm.lib")//加载静态库
#pragma comment(lib,"MSIMG32.LIB")
using namespace std;
int main()
{
    initgraph(WIDTH, HIGHT, EX_SHOWCONSOLE);
    HCURSOR hcur = LoadCursor(NULL, IDC_CROSS);  // 加载系统预置的鼠标样式
    HWND hwnd = GetHWnd();       // 获取绘图窗口句柄
    SetClassLong(hwnd, GCLP_HCURSOR, (long)hcur); // 设置窗口类的鼠标样式,其中第二个参数是鼠标样式
    char ch = getchar();
    closegraph();
}

```

补充:代码会弹出如图警告

img

参考GPT和自己的思路:

根据您提供的代码,可以看到您已经使用了LoadCursor和SetClassLong函数来更改鼠标光标的样式。但是在这个代码片段中,缺少窗口消息循环,这可能会导致您在更改鼠标光标样式时没有看到任何变化。

您可以在main函数中添加一个while循环,用于处理窗口消息,并在循环中添加Sleep函数以减少CPU的使用率。修改后的代码如下所示:

#include<graphics.h>
#include<stdio.h>
#include<easyx.h>
#include<winuser.h>

int main()
{
    initgraph(800, 600);
    HCURSOR hcur = LoadCursor(NULL, IDC_CROSS);  
    HWND hwnd = GetHWnd();       
    SetClassLong(hwnd, GCLP_HCURSOR, (long)hcur);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        Sleep(10);
    }

    closegraph();
    return 0;
}

这样修改之后,您应该就可以成功地更改鼠标光标样式了。

参考GPT和自己的思路:

根据你提供的代码,我发现在使用EasyX时,可以使用自带的鼠标样式,而不需要使用LoadCursor函数进行加载。

可以尝试使用以下代码:

#include<graphics.h>
#include<easyx.h>

int main()
{
    initgraph(640,480);
    setcursor(IDC_HAND); // 使用EasyX自带的鼠标样式
    getch();
    closegraph();
}

这里使用了EasyX提供的setcursor函数来设置鼠标样式,可以在自己喜欢的鼠标样式中选择一个传递给该函数。

HCURSOR hcur = LoadCursor(NULL, IDC_CROSS);
看看这里返回的句柄有效么