VLC 修改源碼,添加對鼠標事件的響應

參考文章: 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消息.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章