有关在 C++ 年通过 DirectShow 从 C# UserControl 中使用 HWND 的示例
Examples on using a HWND from C# UserControl in via DirectShow in C++
有没有人有任何关于如何为C++代码提供一个可用于从 C# UserControl 进行 DirectShow 呈现的窗口的简单示例?
我目前能够创建一个单独的窗口并通过WS_POPUP窗口呈现到窗口,并将其大小/位置与我为 WPF 控件上的视频窗格保留的现有控件窗口相匹配。
一旦我尝试使窗口成为 WPF 控件的子窗口或在新的或现有窗口上设置WS_CHILD,一切都停止呈现,并且我没有收到解释正在发生的事情的错误。
理想情况下,我将能够将现有的 HWND 从 C# 传递到 C++/DirectShow 类,并按原样使用它。
附言
在你问"你为什么不...做一些不同的事情",我需要从C++控制 DirectShow,并且必须通过 C# (WPF) 控件显示结果。 我无法控制这些条件。
C#/WPF (control reserved) <---> C++/CLI <---> C++/HWND/DirectShow
实现此目的的最佳方法是在无窗口模式下使用 VMR。以下代码片段说明了这一点(这是用于工作代码。我已经删除了错误检查等,但应该给你一个想法):
pVMRConfig->SetRenderingMode(VMRMode_Windowless);
m_VMR->QueryInterface(IID_IVMRWindowlessControl9, (void**)&pVMRWindowlessControl);
//displayWnd is what you pass in from your C# app
pVMRWindowlessControl->SetVideoClippingWindow(displayWnd);
RECT rcDest;
GetClientRect(displayWnd, &rcDest);
hr = pVMRWindowlessControl->SetVideoPosition(NULL, &rcDest);
相关文章:
- 获取 SFML 窗口的 HWND 和高可用性?
- 如何获取边缘窗口句柄 (HWND)?
- 标识符"hWnd"未定义
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- 通过比较 GetCurrentProcessId();获得正确的 HWND
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 由于选项卡顺序的原因,鼠标光标总是得到错误的hwnd-MFC应用程序
- 枚举 HWND 属性 c++
- 在C++中将 HWND 转换为十六进制字符串
- 从 HWnd 获得永久 CWnd
- 创建D2D1工厂和HWND渲染目标
- 获取我单击的窗口的 HWND
- hwnd 设置高位是否正常
- 设置 VLC drawable-hwnd 仍会创建一个新窗口
- 如何从其HWND上构建窗口的技术
- 从 HWND 到应用程序名称
- 设置 HWND TXT 颜色
- EnableWindow(hWnd, false) 不禁用键盘输入
- 将 int 转换为 HWND 时的警告
- 有关在 C++ 年通过 DirectShow 从 C# UserControl 中使用 HWND 的示例