參考文章:
http://blog.csdn.net/zjf82031913/article/details/7209436
補充說明:經測試,在調用修改後的dll時,要在 vlc上覆蓋以透明層(如panel),纔可以監視到鼠標的消息。
在使用過程中libvlc創建出來渲染窗口消息在內部捕獲並進行處理,外部的window 無法收到消息,如雙擊,單擊事件,這樣就給使用者帶來了很多不方便的地方.官網論壇有人說要想捕獲鼠標消息要鉤子.開始用鉤子成功捕獲了,但是鉤子必須是全局的很不方便.
後來在網上看到了有人修改源碼:修改文件module/video_output/DirectX/events.c 把WM_RBUTTONUP等消息在視頻窗體上把該消息再轉發一次,
{
POINT pt;
pt.x = GET_X_LPARAM(msg.lParam);
pt.y = GET_Y_LPARAM(msg.lParam);
ClientToScreen(msg.hwnd, &pt);//把子窗體鼠標座標轉換爲屏幕座標
ScreenToClient(p_event->p_vout->p_sys->hparent, &pt);//在把屏幕座標轉換爲父窗體鼠標座標
PostMessage(p_event->p_vout->p_sys->hparent, WM_RBUTTONUP, msg.wParam, MAKELPARAM(pt.x, pt.y));//給父窗體發送該消息,並附帶鼠標座標值
}
按照上面的修改重新編譯vlc-1.0.1把生成dll替換plugins裏的就可以;
vlc-1.1.5源碼變了很多所以修改變爲:
/modules/video_output/msw/events.c中
case WM_LBUTTONDOWN:
MousePressed( p_event, msg.hwnd, MOUSE_BUTTON_LEFT );
//modify
{
POINT pt;
pt.x = GET_X_LPARAM(msg.lParam);
pt.y = GET_Y_LPARAM(msg.lParam);
ClientToScreen(msg.hwnd,&pt);
ScreenToClient(vd->sys->hparent,&pt);
PostMessage(vd->sys->hparent,WM_LBUTTONDOWN,msg.wParam,MAKELPARAM(pt.x,pt.y));
}
break;
修改後libvlc的父窗口可以收到WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK,WM_MBUTTONDOWN,WM_RBUTTONDOWN,WM_RBUTTONUP消息.
VLC 修改源碼,添加對鼠標事件的響應
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
VLC-1.1.5 window下編譯全過程
根據海狗哥的文檔與視頻編譯完成vlc1.1.5. 下面是整理的編譯過程: 1. Cygwin的安裝 使用Cygwin-new(20081208)版。 安裝過程中選擇包爲 Archive
_剪烛西窗_
2020-07-03 12:54:26
搭建MFC調用libvlc的環境
_剪烛西窗_
2020-07-03 12:54:26
Cygwin的編譯錯誤
_剪烛西窗_
2020-02-20 16:19:51
MFC調用VLC接口在IPC控件顯示視頻,然後鼠標在視頻上繪圖解決方法
_剪烛西窗_
2018-09-03 22:38:44
VLC命令行參數詳解
_剪烛西窗_
2018-09-03 22:38:39