繁体   English   中英

如何正确使用 SetMenuItemBitmaps 替换菜单项上的默认 bitmap?

[英]How properly use SetMenuItemBitmaps to replace the default bitmap on a menu item?

我正在尝试更改菜单项上的默认 bitmap。 不幸的是,我没有让它工作。

SetMenuItemBitmaps()的文档指出我应该使用GetSystemMetrics() function 和SM_CXMENUCHECKSM_CYMENUCHECK值来检索默认的 bitmap 尺寸。 我将.bmp文件调整为这些值,但它仍然无法正常工作。

我可能对SetMenuItemBitmaps() function 有误解。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
        SetMenuItemBitmaps(GetMenu(hWnd), ID_RED, MF_BYCOMMAND, LoadBitmap(hInst, L"red.bmp"), LoadBitmap(hInst, L"red.bmp"));
        return 0;
    }
    [...]
}

具有ID_RED id 的菜单项,我想更改其 bitmap:

图片

您需要red项直接所属的菜单的HMENU句柄。 您使用的是顶级HMENU ,但是redcolor项的菜单的子项,它是Menu项的子菜单的子项,它是顶级的子项菜单。

拥有顶级HMENU后,使用GetSubMenu()GetMenuItemInfo()获取Menu项的子菜单HMENU ,然后使用该句柄获取color项的子菜单HMENU ,并且然后最后使用该句柄设置red项目的位图。

此外,您没有检查LoadBitmap()是否返回 NULL 。 即使不是,您也有责任在使用完位图后将其销毁。 因此,即使此代码有效,您也会泄漏资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM