使用ICONINFO创建库存

问题描述 投票:0回答:1

是否可以使用ICONINFO iconinfo.hbmMaskiconinfo.hbmColorCreateCursor创建游标

iconinfo.hbmMaskas a AND和iconinfo.hbmColor作为XOR传递给CreateCursor投掷异常。

HICON Create_Cursor(CURSORINFO CursorInfo)
{   
    ICONINFO iconinfo;
    HICON hIcon = NULL;

    bool bIconInfo = GetIconInfo(CursorInfo.hCursor,&iconinfo);

    if(!bIconInfo)
    {
        // GetIconInfo failed.
    }

    hIcon = CreateCursor(   NULL,
                            iconinfo.xHotspot,
                            iconinfo.yHotspot,
                            32,
                            32,
                            iconinfo.hbmMask,
                            iconinfo.hbmColor   );

    if(hIcon == NULL)
    {
        // CreateCursor failed.
    }
    return hIcon;
}

CreateCursor在通过ICONINFO后失败了,我怎样才能使用HCURSOR API获得CreateCursor ...在互联网上没有关于'CreateCursor'的正确例子如果有人回答,这篇文章会有所帮助。谢谢。

c++ winapi
1个回答
0
投票

我强烈建议阅读:

https://docs.microsoft.com/de-de/windows/desktop/menurc/about-cursors

致你的代码:

ICONINFOs掩码和颜色数据包含HBITMAPS,但CreateCursor API函数需要纯位数据。

“CreateCursor”API似乎根本不支持颜色。

请看看https://docs.microsoft.com/de-de/windows/desktop/menurc/using-cursors

ICONINFO文档说hbmMask确实包含ANDXOR部分:

hbmMask

类型:HBITMAP

图标位掩码位图。如果此结构定义了黑白图标,则对此位掩码进行格式化,使上半部分为图标AND位掩码,下半部分为图标XOR位掩码。在这种情况下,高度应该是两倍的偶数倍。如果此结构定义了颜色图标,则此掩码仅定义图标的AND位掩码。

(Qazxswpoi)

一般问题:

文件还说:

应用程序应将自定义游标实现为资源,并使用LoadCursor,LoadCursorFromFile或LoadImage,而不是在运行时创建游标。使用游标资源可以避免设备依赖,简化本地化,并使应用程序能够共享游标设计。

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-_iconinfo功能的帮助建议:

HCURSOR

类型:HCURSOR

光标的句柄。游标必须由CreateCursor函数创建或由LoadCursor或LoadImage函数加载。如果此参数为NULL,则从屏幕上删除光标。

(Qazxswpoi)

因此,您似乎可以将加载图像的句柄传递给此函数。

SetCursor的文件表明https://docs.microsoft.com/de-de/windows/desktop/api/Winuser/nf-winuser-setcursors和CreateIconIdirects是可互换的:

从ICONINFO结构创建图标或光标。

(Qazxswpoi)

© www.soinside.com 2019 - 2024. All rights reserved.