我的应用程序使用所谓的Internet Explorer样式菜单栏,即打开多个下拉菜单的工具栏。 hbmpItem
设置为HBMMENU_CALLBACK
,以便我的应用可以在WM_DRAWITEM
上绘制自定义的24x24图标。
这在Windows XP上运行正常但在Vista(及以上)上没有为灰色菜单项绘制图标。但是,正常状态下的菜单项也会在Vista上正常显示。但是当项目处于灰色状态时,Vista上不会绘制任何图标。例外:当用户将鼠标移到灰色项目上时,会正确绘制图标。但所有其他灰色项目都没有在Vista上绘制。
有没有人知道这种行为可能是什么原因?
以下是我在WM_DRAWITEM
上绘制图标的方式:
case WM_DRAWITEM: {
DRAWITEMSTRUCT *lpdis = (DRAWITEMSTRUCT *) lParam;
if(!lpdis) return 0;
if(lpdis->CtlType == ODT_MENU) {
struct menuinfo *mi = (struct menuinfo *) lpdis->itemData;
int ricon;
HICON hIcon;
if(lpdis->itemState & ODS_GRAYED) {
ricon = mi->grayedicon;
} else {
ricon = mi->icon;
}
if(!(hIcon = LoadIcon(hInstance_g, MAKEINTRESOURCE(ricon)))) return 0;
DrawIconEx(lpdis->hDC,
lpdis->rcItem.left - 16,
lpdis->rcItem.top + (lpdis->rcItem.bottom - lpdis->rcItem.top - 24) / 2,
hIcon, 24, 24,
0, NULL, DI_NORMAL);
DestroyIcon(hIcon);
return 1;
}
return 0;
}
case WM_MEASUREITEM: {
MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT *) lParam;
if(!lpmis) break;
lpmis->itemWidth += 24;
if(lpmis->itemHeight < 24) lpmis->itemHeight = 24;
return TRUE;
}
感谢您的帮助!
更新
有时会绘制部分图标。以下是截图:您可以看到撤消,复制,粘贴和删除的图标未被绘制。切割的图标部分绘制(它应该是一把完整的剪刀,但实际上只绘制了图标的下半部分)。重做的图标只是因为鼠标光标当前在它上面而正确绘制。只要鼠标光标离开项目,图标就会立即消失。