C#:如何使用directshow.net来显示此对话框? [英] C# : How to use directshow.net to show this dialog?
本文介绍了C#:如何使用directshow.net来显示此对话框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用Directshow.net调用此对话框?
How to call this dialog using Directshow.net?
推荐答案
这样的事情可以工作,假设你有一个IBaseFilter参考:
Something like this would work, assuming you have an IBaseFilter reference:
[DllImport("oleaut32.dll", CharSet = CharSet.Auto)]
internal static extern int OleCreatePropertyFrame(
IntPtr hwndOwner,
uint x, uint y,
[MarshalAs(UnmanagedType.LPWStr)]
string caption,
uint objectCount,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.IUnknown)]
object[] lplpUnk,
int cPages,
IntPtr pageClsID,
Guid lcid,
uint dwReserved,
IntPtr lpvReserved);
public void DisplayPropertyPages(Form form, IBaseFilter filter)
{
var propertyPages = filter as ISpecifyPropertyPages;
DsCAUUID pages;
FilterInfo info;
int hr = filter.QueryFilterInfo(out info);
DsError.ThrowExceptionForHR(hr);
if (propertyPages == null)
{
throw new ApplicationException("IBaseFilter doesn't implement ISpecifyPropertyPages");
}
hr = propertyPages.GetPages(out pages);
DsError.ThrowExceptionForHR(hr);
var filters = new IBaseFilter[1];
filters[0] = filter;
hr = OleCreatePropertyFrame(form.Handle, 0, 0, info.achName, 1, filters,
pages.cElems, pages.pElems, Guid.Empty, 0, IntPtr.Zero);
Marshal.FreeCoTaskMem(pages.pElems);
DsError.ThrowExceptionForHR(hr);
}
这篇关于C#:如何使用directshow.net来显示此对话框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文