後來在網上看到了有人修改源碼:修改文件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下載地址: