我有以下问题,
为Windows资源管理器的上下文菜单添加条目并且Windows 7设计设置为经典时,图标会破坏菜单的对齐方式。
此图片显示添加条目前的菜单(请参阅Microsoft Security Essentials的图标):
添加菜单条目后,它看起来像这样:
您会看到Microsoft Security Essentials图标与菜单标题之间存在空格。使用的位图是标准的bmp 16 x 16。
有谁知道为什么会这样?再一次,这只发生在Win 7经典设计中,其他设计按预期工作。
提前感谢您的帮助
编辑:
这是我添加项目的初始代码:
PART_HorizontalScrollBar
在你帮忙后我改变了:
iconHandle = LoadImageW(NULL, iconPath.c_str(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT | LR_LOADFROMFILE);
MENUITEMINFOW contextEntryAppSuite = { sizeof(contextEntryAppSuite) };
contextMenuItem.fMask = MIIM_STRING | MIIM_STATE | MIIM_BITMAP | MIIM_FTYPE | MIIM_ID;
contextMenuItem.dwTypeData = caption;
contextMenuItem.wID = 0;
contextMenuItem.fType = MFT_STRING;
contextMenuItem.fState = MFS_ENABLED;
contextMenuItem.hbmpItem = static_cast<HBITMAP>(iconHandle);
if(!InsertMenuItemW(hMenu, indexMenu, TRUE, &contextMenuItem))
{
return HRESULT_FROM_WIN32(GetLastError());
}
为:
contextMenuItem.hbmpItem = static_cast<HBITMAP>(iconHandle);
}
答案 0 :(得分:2)
你的原始代码是正确的......不要打扰那个IconToBitmap函数,因为当指定IMAGE_BITMAP时你的LoadImageW会返回HBITMAP。
在XP上使用位图或在更高版本的Windows上使用经典主题的菜单似乎为复选标记保留空间,有时需要使用MNS_CHECKORBMP调用SetMenuInfo ...尝试以下代码:
iconHandle = LoadImageW(NULL, iconPath.c_str(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT | LR_LOADFROMFILE);
MENUITEMINFOW contextEntryAppSuite = { sizeof(contextEntryAppSuite) };
contextMenuItem.fMask = MIIM_STRING | MIIM_STATE | MIIM_BITMAP | MIIM_FTYPE | MIIM_ID;
contextMenuItem.dwTypeData = caption;
contextMenuItem.wID = 0;
contextMenuItem.fType = MFT_STRING;
contextMenuItem.fState = MFS_ENABLED;
contextMenuItem.hbmpItem = static_cast<HBITMAP>(iconHandle);
MENUINFO menuInfo;
menuInfo.cbSize = sizeof(MENUINFO);
menuInfo.fMask = MIM_STYLE;
menuInfo.dwStyle = MNS_CHECKORBMP;
SetMenuInfo(hMenu, &menuInfo);
if(!InsertMenuItemW(hMenu, indexMenu, TRUE, &contextMenuItem))
{
return HRESULT_FROM_WIN32(GetLastError());
}