Здравствуйте.
Я написал вот такой плеер: 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
? Тогда и хэндл автоматом появится.