2010-05-04 2 views
1

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

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-битное растровое изображение для работы, и я не уверен, как настроить 24-битную или 8-битную битовую карту для этого. Я пробовал пользовательский цвет 255,0,255 (который IIRC является прозрачным по умолчанию значение), но пока нет радости ....

+0

Возможный обман http://stackoverflow.com/questions/261559/higher-color-depth-for-mfc-toolbar-icons? – Konrad

ответ

2

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

  • Сказанное - я подозреваю, что некоторые из этих ограничений могут быть сняты для кнопок, реализуемых обычными элементами управления v6. Добавьте commctl 6 в качестве зависимой сборки к вашему exe и посмотрите, изменилось ли поведение.
Смежные вопросы