用的是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();
}
```
补充:代码会弹出如图警告
参考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);
看看这里返回的句柄有效么