我试图将默认的OS光标更改为自定义的一个。 截至目前,我只处理Windows。 我得到一个图像文件,我想要的光标(.png,我应该改变格式?)。 总而言之,我一直在寻找并试图简单地改变光标,但没有成功。 此外,截至目前我正在寻找最简单的解决scheme,尽可能less的代码行。
如果相关:
– 我用的是使用SFML创build的窗口(2.1)。
– 以下编译但没有区别:
HCURSOR hCursor = LoadCursor(NULL, "path/filename.png"); SetCursor(hCursor);
那么,我在寻求社区的知识,有什么想法?
下面的作品:)然而,它立即恢复到默认的Windows鼠标:
HCURSOR hCursor = LoadCursorFromFile("path/filename.cur"); SetCursor(hCursor);
我发现这个LINK ,这和我的问题似乎是一样的。
然而,我不能应用链接中给出的答案
HWND windowHandle; int GCL_Hcursor = -12; //GCL_HCURSOR HCURSOR hCursor = LoadCursorFromFile("Graphics/Cursors/Pointer_small.cur"); SetCursor(hCursor); SetClassLong(windowHandle, GCL_Hcursor, (DWORD)hCursor);
我(显然?)得到:
使用未初始化的局部variables“windowHandle”
大约4小时30分钟后,试图在Windows上获得一个使用SFML的自定义鼠标,我终于设法完成了一个我预计不超过5到10分钟的任务。 因此,我在这里留下了自己的问题的答案,因为互联网无法为像我这样的高手提供清晰明了的答案。 对于需要它的人来说,这可能是有用的。
#include <SFML/Graphics.hpp> #include <windows.h> int main() { sf::RenderWindow window(sf::VideoMode(800, 600), "Simple Cursor Demonstration"); // {This is what matters} { sf::WindowHandle wHandle; wHandle = window.getSystemHandle(); HCURSOR Cursor = LoadCursor(NULL, IDC_HAND); // IDC_ARROW IDC_WAIT IDC_HAND... http://msdn.microsoft.com/en-us/library/ms648391%28v=vs.85%29.aspx //HCURSOR Cursor = LoadCursorFromFile("path/filename.cur"); //.cur or .ani SetCursor(Cursor); SetClassLongPtr(wHandle, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(Cursor)); } // to prove it works, just move the mouse around // not 100% sure the following actually proves it, but the above worked wonders on the project I wanted it for window.clear(sf::Color(sf::Color(0, 255, 0))); window.display(); sf::sleep(sf::milliseconds(3000)); return 0; //I've read this line or equivalent is a good idea... :) }
资料来源:
这个解决方案是从互联网上掠夺的,但主要是从过于复杂的Noob ,这也被删除他们的答案的人提到。 虽然[过于复杂的Noob],它似乎提供了如何在程序上正确实现自定义游标,以及如何在苹果操作系统thingy
– 这也是有用的。
-colinsmith提到光标文件必须是.cur或.ani,.png确实不起作用
PS:最好告诉你自己,在你问及如何在全球范围内改变它之前,Windows如何处理光标。