目录
使用libvlc播放视频时,鼠标放到播放器窗口后会自动小时,且无法相应消息,消息被libvlc内部处理了,可以借助windows平台解决。具体为:再播放视频前创建一个定时器,再定时器函数里处理窗口消息禁用与处理,简单来说就是播放视频时禁用libvlc内部消息机制。具体操作如下:
1、首先重写双击事件
void MainWidget::mouseDoubleClickEvent(QMouseEvent* event)
{
if (this->isFullScreen())
{
this->showNormal();
}
else
{
this->showFullScreen();
}
}
2、在播放函数或者打开视频文件的函数中创建定时器
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄,可以为NULL
UINT_PTR nIDEvent,// 定时器标识符,用于区分多个定时器
UINT uElapse,// 定时器时间间隔,以毫秒为单位
TIMERPROC lpTimerFunc // 定时器回调函数
);
SetTimer(NULL, 1, 300, TimeProc);
里面的TimeProc是回调函数需要在类外实现,如下:
BOOL CALLBACK EnumVLC(HWND hwnd, LPARAM lParam)
{
TCHAR szTitle[1024];
int nLen = GetWindowText(hwnd, szTitle, 1024);
if (nLen > 0)
{
EnableWindow(hwnd, FALSE);
KillTimer(NULL, 1);
}
return TRUE;
}
void CALLBACK TimeProc(HWND hwnd, UINT msg, UINT_PTR id, DWORD time)
{
//vlcmain是播放器窗口的title,先在窗口的类中设置
HWND vlcHwnd = FindWindowEx(NULL, NULL, NULL, L"vlcmain");
if (vlcHwnd)
{
EnumChildWindows(vlcHwnd, EnumVLC, NULL);
}
}
回调函数TImeProc中又有一个回调函数EnumVLC。