2014-11-21 3 views
0

У меня есть приложение, которое воспроизводит видео. Я использую MCI для воспроизведения видео и прикрепления его к панели управления. Я получаю щелчки мыши по основной форме и всем элементам управления, но когда я нажимаю на видео, играя с MCI, он не обнаруживает щелчки мыши.Обнаружение щелчков мышью на видео, воспроизводимом с помощью команд MCI

Как вы можете обнаружить щелчки мыши на видео, воспроизводимом с помощью команд MCI?

+0

Если вы прикрепляете что-то к панели управления, как насчет обработки кликов от этого? Элементы управления пользовательского интерфейса должны иметь возможность обрабатывать клики. – techvice

+0

По какой-то причине это не сработает. это первая вещь, которую я пробовал, передавая дескриптор панелей на видео mci, имея эти щелчки мыши на панели и добавляя их к элементам основных форм. щелчки мыши проходят через всю форму и нажимают на все, что находится за формой. основная форма никогда не ловит щелчки мыши – iedoc

ответ

0

Я, наконец, получил его работу, создав безграничную форму, которую я передаю в ручку mci-видео. Я установил форму TransparencyKey в backcolor. таким образом, видео по-прежнему отображается, но щелчки мыши передаются через основную форму.

Я устанавливаю размер и расположение формы из главной формы, потому что по какой-то причине он не будет работать, устанавливая их в том виде, в котором я до сих пор пытаюсь понять, почему

public VideoForm() 
    { 
     this.FormBorderStyle = FormBorderStyle.None; 
     this.TransparencyKey = Color.White; 
     this.TopMost = true; 
    } 

    public void PlayVideo(int width, int height, ScreenControl control) 
    { 
     string mciCommand = string.Format("open \"{0}\" Type mpegvideo alias {1} parent {2} style child", control.Location(), control.Name, this.Handle.ToString()); 
     int error = WinApi.mciSendString(mciCommand, null, 0, IntPtr.Zero); 

     mciCommand = string.Format("put {0} window at 0 0 {1} {2}", control.Name, width, height); 
     error = WinApi.mciSendString(mciCommand, null, 0, IntPtr.Zero); 

     mciCommand = string.Format("seek {0} to 0", control.Name); 
     error = WinApi.mciSendString(mciCommand, null, 0, IntPtr.Zero); 

     mciCommand = string.Format("play {0} repeat", control.Name); 
     error = WinApi.mciSendString(mciCommand, null, 0, IntPtr.Zero); 

     this.Show(); 
    } 
Смежные вопросы