如何使用自定义游标
How to use a custom cursor?
我正在尝试将默认操作系统光标更改为自定义光标。到目前为止,我只处理Windows。我得到了一个带有我想要的光标的图像文件(.png,我应该改变格式吗?)总而言之,我一直在搜索,并试图简单地改变光标,但没有成功。另外,到目前为止,我正在寻找最简单的解决方案,使用尽可能少的代码行。
如果有关:
-我使用SFML(2.1)创建的窗口。
HCURSOR hCursor = LoadCursor(NULL, "path/filename.png");
SetCursor(hCursor);
所以,我在寻求社区的知识,有什么想法吗?
以下作品:)但是,它会立即恢复到默认的windows鼠标:
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'使用
在尝试让自定义鼠标在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,也有人删除了他们的答案。虽然[对于新手来说过于复杂],但它确实提供了如何在程序上正确实现自定义游标的重要信息,以及如何在苹果操作系统上实现它。
-这也是有用的。
-colinsmith提到游标文件必须是。cur或。ani, .png确实不起作用
- 从位图创建游标的描述在这里http://www.codeproject.com/Articles/5220/Creating-a-color-cursor-from-a-bitmap使用CImage可以很容易地将png转换为位图。只需加载PNG和分离HBITMAP。但是位图本身并不是光标。
- 光标由接收WM_SETCURSOR的窗口设置。因此"替换"一个特定的游标将不起作用。你必须拦截WM_SETCURSOR消息来改变应该返回的游标。
- 你的Edit2是错误的,因为你需要一个有效的窗口句柄来改变窗口类中的光标。但是,如果窗口自己处理游标(见2),这将永远不起作用
PS:在询问如何全局更改光标之前,最好先了解一下Windows是如何处理光标的…
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 如何使用自定义游标
- 为所有游标id在系统范围内设置自定义游标