Добавление прозрачного растрового изображения к кнопке окон

Это некоторое время, так как я сделал это, но я пытаюсь добавить пользовательскую кнопку, графическую к кнопке окон с некоторыми прозрачными областями. Я попробовал различные схемы, но, может казаться, не заставляю прозрачные области показывать. Вот мой код:

hbmpUpDisabled = LoadImage(instance,MAKEINTRESOURCE(IDB_UPARROWDISABLED), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );

SendMessage(GetDlgItem(hWndDlg, IDC_MOVEUP),BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hbmpUpDisabled);

Кто-либо замечает какие-либо проблемы здесь? Это работает, если мой битовый массив является 1-разрядным битовым массивом. Я не мог заставить битовый массив на 32 бита работать, и я не уверен, как установить битовый массив на 8 битов или на 24 бита, чтобы сделать это.... Я попробовал пользовательские 255 0 255 цветов (какой IIRC является прозрачным значением по умолчанию), но до сих пор никакая радость....

1
задан cmaughan 4 May 2010 в 11:42
поделиться

1 ответ

LR_LOADMAP3DCOLORS должен сопоставить серый цвет - в исходном изображении - с текущим цветом поверхности кнопки. Кнопки не используют AlphaBlt или TransparentBlt, поэтому нет никакого способа (кроме пользовательского рисования) установить битмап с прозрачными или альфа-областями на кнопку и ожидать, что он будет работать. Вы просто должны предварительно подготовить битмап с правильным цветом кнопки в его фоновых областях.

  • Это так - я подозреваю, что некоторые из этих ограничений могут быть сняты для кнопок, реализованных в Common Controls v6. Добавьте commctl 6 в качестве зависимой сборки в ваш exe и посмотрите, изменится ли поведение.
2
ответ дан 3 September 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: