Кнопка рисования владельца win32 c ++ с прозрачным изображением

Я реализовал кнопку рисования владельца в моем приложении win32 (без MFC). Кнопка представляет собой обычное растровое изображение 20x20 (круглый значок с прозрачностью). Проблема в том, что кнопка расположена на сплошном фоне, и я вижу серый фон кнопок (поскольку растровое изображение круглое). Я пробовал отвечать на WM_CTLCOLORBTN с помощью NULL_BRUSH, но не повезло .. Я пробовал отображать кнопку с помощью растрового изображения и файла ico, но не сдвинулся с места .. Кто-нибудь знает, как решить эту проблему?

Это моя проблема, значок настроек должен быть прозрачным по краям (не белым / серым)

введите описание изображения здесь


person blejzz    schedule 30.10.2011    source источник
comment
Что вы на самом деле пытаетесь сделать? Сделать полностью невидимую кнопку?   -  person Joel Spolsky    schedule 31.10.2011
comment
нет, это кнопка настроек .. и поскольку это круглый значок, я вижу серый фон по краям.   -  person blejzz    schedule 31.10.2011
comment
Это очень непонятно, но похоже, что вы получили то, о чем просили. Изображение прозрачно на фоне кнопки кнопки. Если вы действительно хотите сделать его прозрачным на фоне parent, вам нужно обработать бит стиля WS_EX_TRANSPARENT.   -  person Hans Passant    schedule 31.10.2011
comment
добавил скриншот, чтобы понять, в чем проблема.   -  person blejzz    schedule 31.10.2011


Ответы (3)


В дополнение к тому, что отвечает @joel, если вы хотите сделать некоторую область прозрачной, поместите уникальный цвет в область, где вы хотите иметь прозрачность, с использованием некоторых редакторов изображений (RGB (0xFF, 0x00,0xFF)) в основном используется Затем используйте TransperantBlt

person sarat    schedule 31.10.2011
comment
Использование функции transparnetBlt не сработало (все равно пришлось удалить фон кнопки по умолчанию). поэтому я объединил TransparentBlt и вернул hollow_brush в сообщении WM_CTLCOLORBTN, что помогло. - person blejzz; 18.11.2011

Похоже, вы пытаетесь создать непрямоугольный элемент управления.

Вы можете позвонить в SetWindowRgn, чтобы сообщить Windows, что ваш элемент управления непрямоугольный.

person Joel Spolsky    schedule 30.10.2011

Вы говорите, что это сплошной фон, но ваше изображение показывает какой-то оранжево-желтый градиент в качестве фона. Если это действительно был стандартный сплошной цвет кнопки Windows, вы можете загрузить растровое изображение с помощью LoadImage, используя LR_LOADMAP3DCOLORS или LR_LOADTRANSPARENT. Поскольку у вас есть градиент, вам придется использовать более сложную технику, чтобы замаскировать растровое изображение. http://www.winprog.org/tutorial/transparency.html

person beater    schedule 31.10.2011