【问题标题】:How do you set hotspot co-ordinates on a Windows cursor generated from an icon file?如何在从图标文件生成的 Windows 光标上设置热点坐标?
【发布时间】:2010-01-26 21:39:41
【问题描述】:

我正在通过图标文件在我的应用程序上设置自定义光标,但点击点位于错误的坐标处。我用

设置光标
SetClassLongPtr(hwnd, GCL_HCURSOR, reinterpret_cast<LONG_PTR>cursor)

其中光标是;

LoadImage(
    NULL,
    "some_path/cursor.ico", 
    IMAGE_ICON, //also tried IMAGE_CURSOR
    0, //width. 0 uses the width of the file provided
    0, //height. 0 uses the height of the file provided
    LR_LOADFROMFILE
); 

光标加载正常,但它的点击来自光标图像的左下角,而不是左上角。

wikipedia article on .ico files 表示热点仅在 .cur 文件上指定,而不是在 .ico 上。

编辑:澄清问题


参考:LoadImage()SetClassLongPtr() 在 msdn 上。

【问题讨论】:

  • 从 .ico(或者更确切地说,创建 .ico 的同一位图)创建一个 .cur 文件并加载以解决问题。不过,我宁愿不必启动另一个应用程序来进行转换。 ico 文件用作光标,只是坐标错误。肯定有办法解决这个问题。

标签: winapi cursor icons


【解决方案1】:

您可以通过CreateIconFromResourceEx 做到这一点

您将指向 CURSOR_RES_HDR 的指针作为第一个参数传递。这是您可以在文档中找到的结构之一,但它不是我能找到的任何头文件。不过这很简单,基本上是 16 位无符号整数,后跟一个包含光标图像数据的 BITMAPINFOHEADER。

typedef struct {
   WORD             xHot;         // x hotspot
   WORD             yHot;         // y hotspot
   BITMAPINFOHEADER bih;
   } CURSOR_RES_HDR;

...

CURSOR_RES_HDR * pImage;

// Fill out pImage

HCURSOR hcur = CreateIconFromREsourceEx((BYTE*)pImage, 
                  cbImage, // size of image data + hotspot (in bytes)
                  FALSE,
                  0x00030000, // version: value mandated by windows
                  0, 0,       // width & height, 0 means use default
                  LR_DEFAULTSIZE | LR_DEFAULTCOLOR);

【讨论】:

    【解决方案2】:

    使用这个出色的cursor editor 创建光标,您可以设置热点、使其动画化等。我发现它非常漂亮和整洁。

    希望这会有所帮助, 此致, 汤姆。

    【讨论】:

      【解决方案3】:

      是的,热点由 .cur 文件的内容决定。 Wikipedia 文章向您展示了这一点,偏移量 4 和 6。Windows 没有在加载光标后更改热点的 API。只需在 Visual Studio 或任何其他光标编辑器中编辑光标,指定热点并将文件保存为 .cur 文件。

      【讨论】:

      • 这只是 .cur 文件的情况。 LoadImage() 允许从位图和图标生成光标。那你怎么指定热点呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多