Как сделать фон значка контекстного меню Windiws Explorer прозрачным?
Я пишу расширение Shell с контекстным меню в проводнике. Для отображения иконки используется примерно такой код.
void DrawMenuItemIcon(int defIconVectorIndex, HMENU defMenuHandle, int defPosition)
{
HDC hDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL); // Создаем контекст для рисования
HDC hMemDC = CreateCompatibleDC(hDC); // Создаем совместимый контекст
HBITMAP hBmp = CreateCompatibleBitmap(hDC, 13, 13); // Создаем совместимый BITMAP
SelectObject(hMemDC, hBmp); // Выбираем контекст для рисования
FillRect(hMemDC, CRect(0, 0, 13, 13), (HBRUSH)(COLOR_MENU)); // Заливаем контекст цветом фона меню, чтобы иконка получилось с прозрачным фоном
DrawIconEx(hMemDC, 0, 0, MenuIcon.at(defIconVectorIndex).GetHIcon(), 13, 13, 0, 0, DI_NORMAL); // Рисуем иконку
DeleteDC(hDC); // Удаляем контекст
DeleteDC(hMemDC); // Удаляем контекст
SetMenuItemBitmaps(defMenuHandle, defPosition - 1, MF_BITMAP | MF_BYPOSITION, hBmp, hBmp); // Назначаем bitmap пункту меню
hBitmaps.push_back(hBmp);
}
MenuIcon.at(defIconVectorIndex).GetHIcon() возвращает HICON (хэндл на иконку, которая загружается из icl) т Иконка получается "прозрачной", если в настройках цветов (Персонализация|Цвета) установлен светлый фон.
Но как только цвет в настройках меняется, появляется фон иконки. Очевидно, что для задания фона нужно использовать не COLOR_MENU, а что то другое, либо как-то иначе всё это делать.
Другие варианты цветов я перепробовал.

