vlc響應windows消息

 在使用過程中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消息.

修改的dll下載地址:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章