Изменение размера элемента управления видео ActiveX на форме вызывает нежелательное мерцание в C ++, даже с двойной буферизацией - PullRequest
0 голосов
/ 08 марта 2011

C ++.Изюминка Borland Developer Studio, но не уверен, что это уместно здесь.

У меня есть элемент управления ActiveX (From Axis Communications), который отображает видео с камеры.Он отлично работает при нормальной работе, но я хочу немного поработать с ним, что вызывает проблему.

Если программно я перемещаю компонент по форме (только координаты x, y), все в порядке- прямоугольник видео перемещается плавно, без мерцания.

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

Я пробовал DoubleBuffering, но это не исправляет.

Это проблема ActiveX?Или, возможно, проблема с компонентом Axis?

Есть ли способ изменить размер без мерцания?


РЕДАКТИРОВАТЬ:

Дальнейшее тестирование:

Может показаться, что это происходит только тогда, когда я изменяю размер элемента управления И одновременно перемещаю элемент управления, что, к сожалению, я и хочу сделать (я увеличиваю и уменьшаю масштаб).

Я собралпростой тест в Visual Basic с элементом управления ActiveX, и он работает нормально.

Точный (преобразованный) тот же код в Borland C ++ имеет мерцание.

Код теста C ++ (который просто изменяет размеркомпонент, поддерживающий статическую центральную точку):

for (int i = 0; i < 100; i++)
{
    AxisMediaControl1->Width = AxisMediaControl1->Width - 2;
    AxisMediaControl1->Height = AxisMediaControl1->Height - 2;
    AxisMediaControl1->Top = AxisMediaControl1->Top + 1;
    AxisMediaControl1->Left = AxisMediaControl1->Left + 1;
    Sleep(50);
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Похоже, это проблема Borland и рендеринга / изменения размера элементов управления ActiveX.

Когда я изменил код для использования API SetWindowPos вместо простого изменения размера компонента, проблемы исчезли!

0 голосов
/ 08 марта 2011

Мое (с надеждой на образование) предположение: проблема с компонентом Axis. То есть ваше приложение отправляет команду изменения размера в компонент ActiveX, и этот компонент имеет цикл обработки событий, который выполняет рисование на основе своей геометрии, хранимой внутри, и не обновляет геометрию правильно.

Я бы предложил создать простой пример и отправить его в службу технической поддержки Axis, поскольку я работал с ними раньше и всегда находил их весьма полезными.

...