我正在从图标文件在我的应用程序上设置自定义光标,但单击点的坐标错误。我用
设置光标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 上。
最佳答案
您可以使用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);
关于winapi - 如何在从图标文件生成的 Windows 光标上设置热点坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133078/