Этот вопрос тесно связан с этим . Но я хотел go об этом, особенно в отношении моих меню. Возможно, для загрузки моих изображений в файл ICO может потребоваться больше работы, чем нужно.
В настоящий момент каждый битмэп элемента меню загружается из ресурса (16 x 16) и устанавливается на элемент меню:
void CChristianLifeMinistryEditorDlg::UpdateMenuBitmap(CMenu * pMenu, UINT uCommandID, UINT uBMPResource,
bool bByPosition /*false*/, bool bDisabled /*false*/)
{
if (pMenu == nullptr)
return;
// We are working on the "actual" bitmap object held in the map
CBitmap & bitmap = m_mapMenuBitmap[uCommandID];
if (bitmap.GetSafeHandle() != nullptr)
bitmap.DeleteObject();
if (bitmap.LoadBitmap(uBMPResource) == NULL)
return;
theApp.SetBitmapBackgroundAsMenuColour(bitmap);
if (bDisabled)
theApp.SetBitmapAsGrayScale(bitmap);
if (!pMenu->SetMenuItemBitmaps(uCommandID,
bByPosition ? MF_BYPOSITION : MF_BYCOMMAND,
&bitmap,
&bitmap))
{
// #UpdateMenuBitmap Failed to set the menu item bitmaps
}
}
На стандартном дисплее изображения меню выглядят следующим образом:
На дисплее Ultra HD изображения меню выглядят меньше:
На основе комментария к другому вопросу:
Настройки DPI 100, 125, 150, 175, 200 соответствуют 16, 20, 24, 28, 32 пикселей для маленьких иконок. Вы можете использовать один набор значков 32x32, а затем загрузить значки с помощью LoadIconWithScaleDown, это должно показывать плавные значки во всех настройках DPI.
Это означает, что я должен добавить весь набор растровых изображений (поскольку все они являются отдельными файлами BMP) для каждого размера пикселя. Это было бы довольно устрашающе.
Или просто иметь размер 32 x 32 и использовать LoadIconWithScaleDown
и уменьшить его. Но я не знаю, как взять его из CBitmap
в иконку, чтобы я мог использовать этот метод.
Какой самый простой способ получить изображение стандартного пункта меню, которое выглядит один и тот же размер в разных конфигурациях DPI, учитывая тот факт, что у меня большой список отдельных ресурсов BMP?