Как сделать так, чтобы элемент управления прозрачно накладывался на видео DirectShow?

У меня есть элемент управления VideoControl, который отображает видео с помощью DirectShow - он установлен как владелец IVideoWindow. У меня есть еще один элемент управления, AreaControl, который должен отображать пунктирный прямоугольник над элементом управления видео. AreaControl настроен на прозрачность с помощью SetStyle (ControlStyles.SupportsTransparentBackColor, true). Если я помещаю AreaControl поверх любого другого элемента управления, он работает должным образом, показывая пунктирный прямоугольник над элементами управления за ним. Но когда я помещаю элемент управления пунктирным прямоугольником над элементом управления видео, AreaControl заполняется BackColor VideoControl.

Что мне нужно сделать, чтобы видео отображалось через AreaControl с наложенным на него пунктирным прямоугольником? Есть ли способ заставить VideoControl рисовать себя вместе с видео, а не просто рисовать его BackColor?


person Simon    schedule 20.11.2008    source источник


Ответы (2)


Насколько я знаю, нет возможности делать то, что вы хотите делать напрямую. Проблема в реализации прозрачного стиля элемента управления. Элемент управления с этим атрибутом стиля в основном просто рисует, что делает его прозрачным. (На самом деле это совсем не прозрачно).

Единственное решение, которое приходит мне в голову, - использовать окно (форму) и поместить в него элемент управления. Форму можно сделать прозрачной, установив для ее свойства Opacity значение меньше 1.0. Значение 0,0 будет полностью прозрачным (читай: невидимым). Пунктирная граница должна быть полностью черной. С непрозрачностью f.e. 0.4 он станет серым.

Кроме того, вам может повезти со свойством формы TransparencyKey. Установка белого цвета может дать желаемый эффект, но я не тестировал этот.

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

person Mario    schedule 09.12.2008

В конце концов, ответом оказалось использование свойства Region для AreaControl, поскольку нам не нужна была частичная прозрачность.

person Simon    schedule 02.03.2009