Во-первых, извините, если я чувствую себя высокомерным/грубым здесь.Раз и навсегда: как получить полностью прозрачный флажок, кнопку, переключатель и т. Д. В Windows API, а не с черным фоном?
Хорошо, так что все натолкнулись на это к настоящему времени (я надеюсь); Я просто не нашел любого адекватного ответа в любом месте. Мы начнем с общего управления 6 манифеста и
case WM_CTLCOLORSTATIC:
if (/* window has WS_EX_TRANSPARENT */) {
SetBkMode((HDC) wParam, TRANSPARENT);
return (LRESULT) GetStockObject(HOLLOW_BRUSH);
}
и дать нашим этикетки WS_EX_TRANSPARENT
. Они становятся прозрачными; Все идет нормально. Теперь мы должны добавить этот стиль к нашим флажкам (потому что по каким-то причинам флажки отвечают этому, а не WM_CTLCOLORBTN
). И ... флажки становятся черными!
Есть ли способ сделать их полностью прозрачными, не прибегая к притяжению владельца? Я бы не стал сам рисовать флажки; Я бы предпочел не догадываться, выглядит ли это правильно или каковы размеры, если API-интерфейс API заканчивается на мне (и мне придется в будущем делать флажки, когда я добавляю собственные флажки в свои списки и я уже не доволен количеством угадываний).
Эти флажки нарисованы над элементом управления вкладкой. До сих пор я обнаружил пять диалоговых окон в Windows XP с прозрачными флажками на тематических вкладках: вкладка «Общие» свойств «Ярлык», вкладка «Панель задач» панели задач и «Свойства меню« Пуск », вкладка« Восстановление системы »« Свойства системы », вкладка« Общие »опций папки (переключатели) , и вкладку «Клавиатура» в разделе «Параметры специальных возможностей». Так что это, безусловно, должно быть возможно! Я уверен, что авторам пользовательских интерфейсов Windows не пришлось использовать пользовательскую ничью во всей ОС ... Что мы все не хватает?
Если мне нужно подкласс, это нормально (у меня уже есть подкласс в любом случае для обработки событий), но мне все же не нужно рисовать.
В качестве бонуса, как насчет кнопок? Переопределение WM_CTLCOLORBTN
дает кнопкам черную рамку, но я замечаю, что ни один из стандартных диалогов, упомянутых выше, не пытается сделать углы кнопок прозрачными, поэтому eh:/
Спасибо!
Стандартные элементы управления Win32 не поддерживает прозрачность сами по себе. Вы должны убить его. 'WS_EX_TRANSPARENT' - это не так. –
Правильно, но здесь у меня создалось впечатление, что если я установлю 'WS_EX_TRANSPARENT', который сообщает диспетчеру окон не рисовать до тех пор, пока родительские окна не будут нарисованы, и верните полые кисти из сообщений' WM_CTLCOLORxxx', которые элементы управления будут рисовать с помощью полая кисть, которая ничего не рисует и, таким образом, показывает содержание ниже. Где это нарушение? – andlabs
А я вижу, это на самом деле прозрачно для братьев и сестер, а не для родителя: | Поэтому я предполагаю, что флажки не обрабатывают 'WM_CTLCOLORSTATIC' должным образом, и в этом случае есть что-то еще, что я могу сделать, чтобы избежать необходимости рисовать фон самостоятельно? Я попробовал 'case WM_ERASEKGND: return 1;' в подклассе и вызывать 'SetBkMode()' там, оба без эффекта. – andlabs