DirectShow IMediaEventEx обработчик событий

Здравствуйте.
Я написал вот такой плеер: Minimal-video-player/ZeratoolPlayerEngine.cs at main · BlackMightyRavenDark/Minimal-video-player · GitHub

Теперь надо добавить обрабитчик событий Графа. Это делается с помощью интерфейса IMediaEventEx. Для этого у него есть метод SetNotifyWindow(), в который надо передать хэндл окна (например, главной формы), которое будет принимать сообщения.
Собственно, всё работает:

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case DIRECTSHOW_EVENTS_MESSAGE:
                    while (playerEngine.MediaEventEx.GetEvent(
                        out DirectShowLib.EventCode eventCode, out IntPtr param1, out IntPtr param2, 1) == S_OK)
                    {
                        playerEngine.MediaEventEx.FreeEventParams(eventCode, param1, param2);
                        if (eventCode == DirectShowLib.EventCode.Complete && State == PLAYER_STATE.Playing)
                        {
                            System.Diagnostics.Debug.WriteLine("track finished");
                            if (TrackFinished != null)
                            {
                                TrackFinished.Invoke(this);
                            }
                            else
                            {
                                Pause();
                            }
                        }
                    }
                    break;
            }

            base.WndProc(ref m);
        }

Но можно ли перенести этот обработчик в класс плеера? Там же нет окна. Можно ли создать невидимый Control и переопределить его WndProc?
Предполагается, что в процессе будет создан не один экземпляр этого плеера.
Добавлено: а может тупо в лом наследовать класс плеера от Control? :thinking: Тогда и хэндл автоматом появится.

Реализовать в нем IMessageFilter и передать объект в Application.AddMessageFilter.

а в IMediaEventEx.SetNotifyWindow() что передавать? :thinking:

хм, хз, смотря для чего оно ему нужно. Может просто хендл любой формы.

ну как для чего? Он туда сообщения шлёт. Я же сразу написал.

Ну так в этом и проблема. Плеер (точнее, его движок) не должен знать ни о каких формах.

Ну передать хендл в параметрах конструктора это ж не особо “знать о формах”.

Я хочу, чтобы всё делалось внутри класса, а события приходили через делегаты. Чтобы можно было вешать несколько обработчиков.

Так работает, но мерцает при создании класса, почему-то :thinking: А потом мерцаний, вроде, нет.