解决 libVLC无法响应鼠标信息
1. 问题背景
在基于 libVLC做播放器时, 会遇到 VLC播放窗口无法响应鼠标消息, 即无法拖动播放器以及双击全屏, 消息都被 libVLC内部处理了
2. 解决方案
-
使用全局钩子
不安全, 容易被杀毒软件和谐 -
修改 libVLC鼠标消息处理代码,重新编译
难度大 -
禁用子窗口消息
较容易实现
3. 基于MFC代码实现
-
添加播放器控件 -> Picture Control:IDC_VIDEO_HWND
-
获取 IDC_VIDEO_HWND 控件句柄
gPlayHwnd = GetDlgItem(IDC_VIDEO_HWND)->GetSafeHwnd();
- 将 IDC_VIDEO_HWND设置为 VLC播放句柄
libvlc_media_player_set_hwnd (mp, gPlayHwnd);
- 开始播放后创建一个定时器(也可以不创建,直接 EnableWindow相应窗口句柄)
::SetTimer(NULL, 1, 1000, TimeProc);
- 定时器回调函数
//定时器回调
void CALLBACK TimeProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime)
{
EnumChildWindows(gPlayHwnd, EnumerateVLC, NULL);
}
BOOL CALLBACK EnumerateVLC(HWND hWndvlc, LPARAM lParam)
{
TCHAR szWndTitle[1024];
int nLen = GetWindowText(hWndvlc, szWndTitle, 1024);
if (0 != nLen)
{
//禁用鼠标消息
EnableWindow(hWndvlc, FALSE);
KillTimer(NULL, 1);
}
return TRUE;
}