Как получить изображение элемента меню одинакового размера в разных конфигурациях DPI, когда у меня есть список отдельных ресурсов BMP? - PullRequest
0 голосов
/ 06 января 2020

Этот вопрос тесно связан с этим . Но я хотел 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
    }
}

На стандартном дисплее изображения меню выглядят следующим образом:

Normal images

На дисплее Ultra HD изображения меню выглядят меньше:

Ultra HD images

На основе комментария к другому вопросу:

Настройки DPI 100, 125, 150, 175, 200 соответствуют 16, 20, 24, 28, 32 пикселей для маленьких иконок. Вы можете использовать один набор значков 32x32, а затем загрузить значки с помощью LoadIconWithScaleDown, это должно показывать плавные значки во всех настройках DPI.

  • Это означает, что я должен добавить весь набор растровых изображений (поскольку все они являются отдельными файлами BMP) для каждого размера пикселя. Это было бы довольно устрашающе.

  • Или просто иметь размер 32 x 32 и использовать LoadIconWithScaleDown и уменьшить его. Но я не знаю, как взять его из CBitmap в иконку, чтобы я мог использовать этот метод.

Какой самый простой способ получить изображение стандартного пункта меню, которое выглядит один и тот же размер в разных конфигурациях DPI, учитывая тот факт, что у меня большой список отдельных ресурсов BMP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...