首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用自定义游标?

如何使用自定义游标?
EN

Stack Overflow用户
提问于 2014-08-06 21:42:22
回答 2查看 8.9K关注 0票数 6

我正在尝试将默认OS游标更改为自定义游标。到目前为止,我只处理Windows。我得到了一个带有我想要的光标的图像文件(.png,我应该改变格式吗?)总之,我一直在搜索并试图简单地更改光标,但没有成功。另外,到目前为止,我正在寻找最简单的解决方案,尽可能少的代码行。

如果相关的话:

-我正在使用用SFML(2.1)创建的窗口。

下面的-The编译但没有什么区别:

代码语言:javascript
运行
复制
HCURSOR hCursor = LoadCursor(NULL, "path/filename.png");
SetCursor(hCursor);

所以,我在寻求社会的知识,有什么想法吗?

但是,它会立即恢复为默认窗口鼠标:

代码语言:javascript
运行
复制
HCURSOR hCursor = LoadCursorFromFile("path/filename.cur");
SetCursor(hCursor);

我找到了这个链接,这似乎和我的问题一样。

然而,我无法应用链接中给出的答案。

代码语言:javascript
运行
复制
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”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-07 23:22:17

经过大约4小时30分钟的尝试让一个自定义的鼠标在Windows上使用SFML,我终于成功地完成了一项任务,我原本预计不会超过5到10分钟。因此,我把我自己的问题的答案留在这里,因为互联网无法向像我这样的菜鸟提供干净和清晰的答案。希望它对任何需要它的人都有用。

代码语言:javascript
运行
复制
#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确实不工作。

票数 6
EN

Stack Overflow用户

发布于 2014-08-07 05:58:05

  1. 这里描述了从位图创建游标的过程,http://www.codeproject.com/Articles/5220/Creating-a-color-cursor-from-a-bitmap将png转换为位图可以很容易地用CImage完成。只需加载PNG并分离HBITMAP。但是位图本身并不是光标。
  2. 游标由接收WM_SETCURSOR的窗口设置。因此,“替换”特定的游标将无法工作。您必须拦截WM_SETCURSOR消息才能更改应该返回的游标。
  3. 您的Edit2是错误的,因为您需要一个有效的窗口句柄来更改窗口类中的光标。但是,如果窗口按ist属于自己的方式处理游标,这是行不通的(参见2)

PS:在询问如何在全球范围内更改游标之前,最好先告诉自己Windows是如何处理游标的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25170730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档