Re: Картинки на кнопках
От: McQwerty Россия  
Дата: 20.02.03 07:54
Оценка: 61 (4)
Здравствуйте, Сергей М., Вы писали:

СМ>Для установки картинки на кнопке ей посылается сообщение BM_SETIMAGE. При этом картинка рисуется со своим фоном, а хотелось бы, чтобы с фоном кнопки. Можно ли этого добиться для кнопки со стилем BS_BITMAP, а не BS_OWNERDRAW ? М.б. предварительно подправить фон самой картинки ?


Можно. Ключевое слово — LR_MAP3DCOLORS

BOOL _XCTL_CALL Dialog_AssignButtonBitmap (HWND hDlg, UINT nID, HINSTANCE hInstance, UINT nBitmap)
{
    // Загружаем катринку (с конвертацией цветов)
    HBITMAP hBitmap = (HBITMAP) LoadImage (hInstance, MAKEINTRESOURCE (nBitmap),
        IMAGE_BITMAP, 0, 0, LR_VGACOLOR | LR_LOADMAP3DCOLORS);
    // Неудача - сваливаем (см. GetLastError)
    if (!hBitmap) return FALSE;

    // Устанавливаем картинку на кнопку
    HBITMAP hPrev = (HBITMAP) SendDlgItemMessage (hDlg, nID, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBitmap);
    // Если картинка уже была - удаляем предыдущую
    if (hPrev) DeleteObject (hPrev);

    // Все хорошо
    return TRUE;
} // Dialog_AssignButtonBitmap


Картинку рисуешь как обычно, но помнишь, что при загрузке некоторые цвета заменятся на текущие системные:
Темно-серый: RGB(128,128,128) -> COLOR_3DSHADOW
Серый: RGB(192,192,192) -> COLOR_3DFACE
Светло-серый: RGB(223,223,223) -> COLOR_3DLIGHT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.