[英]How to properly measure & display owner drawn context menu item with a checkmark?
[英]How properly use SetMenuItemBitmaps to replace the default bitmap on a menu item?
我正在尝试更改菜单项上的默认 bitmap。 不幸的是,我没有让它工作。
SetMenuItemBitmaps()
的文档指出我应该使用GetSystemMetrics()
function 和SM_CXMENUCHECK
和SM_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
,但是red
是color
项的子菜单的子项,它是Menu
项的子菜单的子项,它是顶级的子项菜单。
拥有顶级HMENU
后,使用GetSubMenu()
或GetMenuItemInfo()
获取Menu
项的子菜单的HMENU
,然后使用该句柄获取color
项的子菜单的HMENU
,并且然后最后使用该句柄设置red
项目的位图。
此外,您没有检查LoadBitmap()
是否返回 NULL 。 即使不是,您也有责任在使用完位图后将其销毁。 因此,即使此代码有效,您也会泄漏资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.