Адская_Капча » 31.07.2014 (Чт) 16:25
WS_EX_TRANSPARENT - у меня сработало только для VB-шных форм. Или я что-то делаю не так?
Какой еще должен быть флаг? С прозрачностью больше никаких флагов нет, кроме WS_EX_LAYERED, но он не годится, потому что Windows8 - не вариант. Нужно, чтобы работало в Windows 7 и Windows XP.
Пример с CreateCompatibleBitmap + CreateIPictureDispFromHBITMAP оказывается не работает и в Word, если рисовать простой текст на юзерконтроле через GDI.
SetWindowRgn думаю, тоже не подойдет. Нужно определенный цвет на юзерконтроле (его фон) сделать прозрачным.
Ни один из примеров, найденных в сети, не решил проблему.
Попробую объяснить задачу более детально.
1. Создаю UserControl.
2. Он должен содержать пару нарисованных линий и простой текст (с помощью GDI). Где именно рисовать - на самом юзерконтроле или на размещенном в нем PictureBox - не особо важно.
3. Компилирую в OCX, либо добавляю его в соседний проект VB.
4. Добавленный ActiveX контрол должен содержать только нарисованный текст/линии. Остальное (его фон) - должны быть прозрачны.
То есть должны быть видны элементы, которые находятся под этим контролом, а не просто "дыра". Если добавили в Excel например, то должны быть видны ячейки и формулы сквозь него, но не сам написанный на нем текст.
5. Прозрачность должна работать как в Design, так и в User Mode, не пропадать, при изменении размера или положения контрола ничего не должно пропадать или искажаться. Прозрачность должна работать в любой среде, независимо от того, где размещен контрол - в MS Word, Excel, VB, Delphi, PhotoShop и т.д. ОС - нужно, чтобы работало не только в Windows 8, но и в Windows 7 и XP.
Задачу решить не удалось. Одни способы работают в одних случаях, а другие - в других.
В какую сторону копать, ума не приложу. AlphaBlend, BitBlt, TransparentBlt? И какой должен быть сам контрол - Windowless или нет (свойство)?
Насчет встроенного свойства BackStyle: если Transparent - в Excel полностью исчезает вместе с содержимым, а в Word не срабатывает. Остается Opaque.