C ++。 Borland Developer Studio的味道,但不确定这是否与此相关。
我有一个ActiveX控件(来自Axis Communications),可以显示来自摄像头的视频。它在正常操作中运行良好,但我想对它进行一些调整,这会引起问题。
如果,以编程方式,我在窗体周围移动组件(只是x,y坐标),一切都很好 - 视频矩形平滑移动,没有闪烁。
然而,如果我调整组件的大小(再次,在代码中),我会在较低和较低的位置闪烁。右手边缘。通过闪烁,我的意思是它会在这些边缘上产生白色边框,并且会在实际图片上闪烁。
我尝试过DoubleBuffering,但这并没有解决它。
这是一个ActiveX问题吗?或者可能出现Axis Component问题?
有没有办法可以在没有闪烁的情况下完成大小调整?
编辑:
进一步测试:
看起来这只会在我调整控件并同时移动控件时发生,不幸的是我想要做的事情(我正在放大和缩小)。
我在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);
}
答案 0 :(得分:0)
我(希望受过教育的)猜测是Axis组件的问题。也就是说,您的应用程序向ActiveX组件发送一个resize命令,该组件有一个事件循环,根据它内部存储的几何图形进行绘制,并且它没有正确更新几何体。
我建议创建一个简单的示例并将其发送给Axis技术支持,因为我之前曾与他们合作并且总是发现它们非常有帮助。
答案 1 :(得分:0)
这似乎是Borland和ActiveX控件的渲染/调整大小的问题。
当我更改代码以使用“SetWindowPos”API而不是仅调整组件大小时,问题就消失了!