Winapi 如何使用动画控件播放透明AVI?
我在WTL对话框窗口上使用动画控件,如下所示:Winapi 如何使用动画控件播放透明AVI?,winapi,avi,Winapi,Avi,我在WTL对话框窗口上使用动画控件,如下所示: if (!Animate_IsPlaying(m_aviWindow)) { PTSTR pszAviFile = _T("C:\\build\\VS2008ImageLibrary\\Animations\\FILEMOVE.AVI"); //MAKEINTRESOURCE(IDR_AVI1); Animate_Open(m_aviWindow, pszAviFile); A
if (!Animate_IsPlaying(m_aviWindow))
{
PTSTR pszAviFile = _T("C:\\build\\VS2008ImageLibrary\\Animations\\FILEMOVE.AVI");
//MAKEINTRESOURCE(IDR_AVI1);
Animate_Open(m_aviWindow, pszAviFile);
Animate_Play(m_aviWindow, 0, -1, -1);
}
问题是AVI有一个洋红色背景RGB254,0,254,即使我响应WM_CTLCOLORSTATIC消息,AVI也是不透明的
LRESULT OnCtlColorStatic(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
if ((HWND)lParam == m_aviWindow.m_hWnd)
{
HDC hdc = (HDC)wParam;
COLORREF color = RGB(254, 0, 254);
SetBkColor(hdc, color);
//SetBkMode(hdc, TRANSPARENT);
SetPixel(hdc, 0, 0, color);
return (LRESULT)CreateSolidBrush(color);
return (LRESULT)GetStockObject(NULL_BRUSH);
}
return 0;
}
我尝试了许多可能的SetBkColor/SetPixel/SetBkMode/etc组合,但仍然无法使AVI透明。我做错了什么?创建动画控件时,需要指定。然后,控件将使用第一帧的左上像素作为透明度颜色。动画控件不支持透明度。设置将所有与第一帧左上角像素颜色相同的像素重新映射到WM_CTLCOLORSTATIC-handler提供的颜色。这不会产生一个透明的视频。这是我的疏忽。VisualStudio中的对话框设计器同时具有透明和动画透明,但我只更改了透明属性,该属性不起作用。我认为透明是从静态控件继承而来的,动画透明确实有效。