DirectShow IVideoWindow не приходит даблклик

Вляпался в ещё один глюк.
Настраиваю окно вывода видео так:

        public bool ConfigureVideoOutput()
        {
            if (OutputWindow == null || basicVideo == null || basicVideo.GetVideoSize(out _videoWidth, out _videoHeight) != S_OK)
            {
                return false;
            }

            videoWindow.put_Owner(OutputWindow.Handle);
            videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipChildren | WindowStyle.ClipSiblings);
            videoWindow.put_MessageDrain(OutputWindow.Handle);

            Rectangle r = CenterRect(ResizeRect(new Rectangle(0, 0, _videoWidth, _videoHeight), OutputWindow.Size), OutputWindow.ClientRectangle);
            SetScreenRect(r);
            videoWindow.put_Visible(OABool.True);

            return true;
        }

OutputWindow это Panel. put_MessageDrain(OutputWindow.Handle) означает, что панель будет принимать события мыши, приходящие в окно с видео. Однако, MouseDoubleClick (может еще что-то) не приходит. Что сделать, чтобы приходил?

Здесь пишут, что это зависит от рендерера. Но я перепробовал все рендереры и нифига.
А тут DirectShow .NET / Discussion / Open Discussion: Get mouse events from IVideoWindow oject? пишут, что

You will only get MouseDown and MouseUp events from MessageDrain. If you need click and double click events then you will have to write your own methods to detect them.

но как? Это получается, создавать наследника от Panel и там извращаться с отловом двойного MouseDown? :thinking: В принципе, не сложно, но может нормальный способ есть? :man_shrugging:

написал такую хрень

using System;
using System.Windows.Forms;

namespace xxx
{
    public partial class CustomPanel : Panel
    {
        private DateTime lastDown = DateTime.MinValue;

        public delegate void MouseDoubleDownDelegate(object sender, MouseEventArgs e);
        public MouseDoubleDownDelegate MouseDoubleDown;

        public CustomPanel()
        {
            MouseDown += (s, e) =>
            {
                if (MouseDoubleDown != null)
                {
                    DateTime now = DateTime.Now;

                    //System.Diagnostics.Debug.WriteLine("down");
                    if ((now - lastDown).Ticks < TimeSpan.FromSeconds(0.5).Ticks)
                    {
                        //System.Diagnostics.Debug.WriteLine("double down");
                        MouseDoubleDown.Invoke(this, e);
                    }
                    lastDown = now;
                }
            };
        }

        
    }
}

Вроде работает.
А можно это событие в окно “свойства” вынести? Или для этого надо в виде компонента писать?

Вроде бы надо просто [Browsable(true)]

BrowsableAttribute Class (System.ComponentModel) | Microsoft Docs
https://stackoverflow.com/a/41104603

Эта фигня даже и не нужна. Можно просто написать event после public.