Оболочка Windows предоставляет различные значки по умолчанию, среди которых также значок щита UAC.
Загрузка иконки
SHSTOCKICONINFO ssii = {};
ssii.cbSize = sizeof(ssii);
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON, &ssii);
Это дает вам HICON
, однако SetMenuItemBitmaps
требует HBITMAP
, поэтому HICON
необходимо преобразовать:
ICONINFOEX iconInfo = {};
iconInfo.cbSize = sizeof(iconInfo);
GetIconInfoEx(ssii.hIcon, &iconInfo);
auto bitmap = (HBITMAP)CopyImage(iconInfo.hbmColor, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
Наконец, установите значок:
SetMenuItemBitmaps(hMenu, YOUR_MENU_ITEM_COMMAND, MF_BYCOMMAND, bitmap, bitmap);
Очистка:
DestroyIcon(ssii.hIcon);
bitmap
необходимо уничтожить после уничтожения меню (используя DeleteObject(bitmap);
) или очистить при завершении работы приложения, как описано в CopyImage (MSDN) и SetMenuItemBitmaps (MSDN) .