我正在尝试将默认OS游标更改为自定义游标。到目前为止,我只处理Windows。我得到了一个带有我想要的光标的图像文件(.png,我应该改变格式吗?)总之,我一直在搜索并试图简单地更改光标,但没有成功。另外,到目前为止,我正在寻找最简单的解决方案,尽可能少的代码行。
如果相关的话:
-我正在使用用SFML(2.1)创建的窗口。
下面的-The编译但没有什么区别:
HCURSOR hCursor = LoadCursor(NULL, "path/filename.png");
SetCursor(hCursor);所以,我在寻求社会的知识,有什么想法吗?
但是,它会立即恢复为默认窗口鼠标:
HCURSOR hCursor = LoadCursorFromFile("path/filename.cur");
SetCursor(hCursor);我找到了这个链接,这似乎和我的问题一样。
然而,我无法应用链接中给出的答案。
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”
发布于 2014-08-07 23:22:17
经过大约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... :)
}资料来源:
-This解决方案在互联网上被掠夺,但主要来自对于Noob来说太复杂了,这也被一些人删除了他们的答案。虽然对于Noob来说过于复杂,但它确实提供了关于如何在程序上正确实现自定义游标以及如何在apple OS上正确实现自定义游标的很好的信息。
-这也很有用。
-colinsmith提到游标文件必须是.cur或.ani,.png确实不工作。
https://stackoverflow.com/questions/25170730
复制相似问题