gpt4 book ai didi

c++ - ActiveX HWND、DirectX WindowLess 模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:14 29 4
gpt4 key购买 nike

我想在 ActiveX 控件中呈现视频(而不是在弹出的 DirectShow 窗口中)。我有:

IID_IVMRWindowlessControl
IID_IVMRFilterConfig9
CLSID_VideoMixingRenderer9

我想设置 WindowLess 模式,但我不知道如何获得 HWND 的...,确切地说,是什么? IEFrame、HTML 元素?

hr = pWc->SetVideoClippingWindow(???); 

谁有一些提示?

问候。

最佳答案

首先,将其添加到 ActiveX 控件的构造函数中:

// this seemingly innocent line is _extremely_ important.
// This causes the window for the control to be created
// otherwise, you won't get an hWnd to render to!
m_bWindowOnly = true;

您的 ActiveX 控件将有一个名为 m_hWnd 的成员变量,您可以将其用作呈现目标。如果 m_bWindowOnly 变量设置为真,ActiveX 控件将不会创建自己的窗口。

最后,选择您的渲染器(例如 VMR9)

CRect rcClient;
CComPtr<IBaseFilter> spRenderer;
CComPtr<IVMRWindowlessControl9> spWindowless;

// Get the client window size
::GetClientRect(m_hWnd, rcClient);

// Get the renderer filter
spRenderer.Attach( m_pGraph->GetVideoRenderer() );
if( ! spRenderer )
return E_POINTER;

spWindowless = spRenderer;
if( spWindowless )
{
spWindowless->SetVideoClippingWindow( m_hWnd );
spWindowless->SetVideoPosition(NULL, rcClient);
spWindowless.Release();
}

spRenderer.Detach();

请注意,我的图形对象是一个自定义对象,而 GetVideoRenderer() 是我自己的函数之一 - 它返回一个 IBaseFilter*。

我花了很长时间才找到这个。 ATL 的文档很少,这很遗憾,因为它是一项出色的技术。无论如何,希望这对您有所帮助!

关于c++ - ActiveX HWND、DirectX WindowLess 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com