Esempio n. 1
0
        public bool DisplayFilterPropPage(IntPtr hParent, string strFilter, bool bDisplay)
        {
            if (_graphBuilder == null)
            {
                return(false);
            }

            IBaseFilter pFilter;

            _graphBuilder.FindFilterByName(strFilter, out pFilter);
            if (pFilter == null)
            {
                return(false);
            }

            var bRet  = false;
            var pProp = pFilter as ISpecifyPropertyPages;

            if (pProp != null)
            {
                CAUUID caGuid;
                var    hr = pProp.GetPages(out caGuid);
                if (DsHlp.SUCCEEDED(hr) && caGuid.cElems > 0)
                {
                    bRet = true;

                    if (bDisplay)
                    {
                        // Show the page
                        object pFilterUnk = pFilter;
                        DsUtils.OleCreatePropertyFrame(
                            hParent,                // Parent window
                            0, 0,                   // Reserved
                            strFilter,              // Caption for the dialog box
                            1,                      // Number of objects (just the filter)
                            ref pFilterUnk,         // Array of object pointers.
                            caGuid.cElems,          // Number of property pages
                            caGuid.pElems,          // Array of property page CLSIDs
                            0,                      // Locale identifier
                            0, IntPtr.Zero          // Reserved
                            );
                    }
                }

                // Clean up
                if (caGuid.pElems != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(caGuid.pElems);
                }
            }

            Marshal.ReleaseComObject(pFilter);
            return(bRet);
        }