我正在使用SetCursor将系统光标设置为我自己的图像。代码看起来像这样:

// member on some class
HCURSOR _cursor;

// at init time
_cursor = LoadCursorFromFile("somefilename.cur");

// in some function
SetCursor(_cursor);

当我这样做时,光标确实发生了变化,但是在第一个鼠标移动消息上,它又变回了默认的系统箭头光标。这是项目中设置光标的唯一代码。我需要做些什么才能使光标保持设置的状态?

最佳答案

看来我有两个选择。第一个是Mark Ransom在这里建议的,它是响应Windows WM_SETCURSOR消息并在那时根据鼠标所在的位置调用SetCursor。通常,只有当光标在窗口上方时,窗 Eloquent 会向您发送WM_SETCURSOR,因此您只需将光标设置在窗口中即可。

另一个选择是在我调用SetCursor的同时为窗口句柄设置默认光标。这会将默认处理程序设置的游标更改为WM_SETCURSOR。该代码看起来像这样:

// defined somewhere
HWND windowHandle;
HCURSOR cursor;

SetCursor(cursor);
SetClassLong(windowHandle, GCL_HCURSOR, (DWORD)cursor);

如果使用第二种方法,则必须同时调用SetCursorSetClassLong,否则光标将不会更新,直到下一次鼠标移动为止。

关于windows - 鼠标移动后SetCursor还原,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/169155/

10-13 04:21