我正在尝试将默认操作系统光标更改为自定义操作系统。截至目前,我只处理Windows。我得到了一个带有我想要的光标的图像文件(.png,我应该改变格式吗?)。 总而言之,我一直在寻找并试图简单地改变光标,但没有成功。 此外,截至目前,我正在寻找最简单的解决方案,尽可能少的代码行。
如果相关:
- 我正在使用一个用SFML(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);
我(显然?)得到:
未初始化的局部变量'windowHandle'使用
答案 0 :(得分:4)
在Windows上尝试使用SFML的自定义鼠标大约需要4小时30分钟后,我终于设法完成了我预计使用不超过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... :)
}
来源:
- 这个解决方案是从互联网上掠夺的,但主要是来自Overcomplicated for a Noob,也有人删除了他们的回答。虽然[过于复杂的Noob],它似乎提供了关于如何在程序上正确实现自定义游标的很好的信息,以及如何在苹果操作系统上执行它而不是 - This也很有用 -colinsmith提到光标文件必须是.cur或.ani,.png确实不起作用
答案 1 :(得分:0)
PS:在你询问如何全局更改游戏之前,最好先了解一下Windows如何处理游标......