Videowindow:
directshow播放画面刷新问题,
开始播放后画面会出来,一切正常。现在的问题是
当别的未最大化的窗口半遮或全遮住视频窗口,画面不都能正常刷新, 只有拖动一下dialog画面才会出来
但是:当此dialog最小化,再恢复时, 能正常刷新
我出现的问题,和下列问题都不相同,导致处理方法也不相同.
大多数刷新问题,都可以从下面这个帖子,去解决.
http://blog.csdn.net/arthurlee/archive/2008/10/09/3043977.aspx
http://www.qqgb.com/Program/VC/VCJQ/Program_176331.html
pVidWin->
put_Owner((OAHWND)GetDlgItem(IDC_VW_FRAME)-> GetSafeHwnd());
2、GetDlgItem(IDC_VW_FRAME)->
ModifyStyle(0, WS_CLIPCHILDREN);
3、OnPaint 不用动
4、OnEraseBkgnd 加如下代码
RECT rect;
GetDlgItem(IDC_VW_FRAME)->
GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->
ExcludeClipRect(&rect);
return
CDialog::OnEraseBkgnd(pDC);
可是我的窗口不要上面这四条,只要把窗口属性设置成
DWORD m_dwExStyle=WS_EX_LEFT | WS_EX_LTRREADING
| WS_EX_RIGHTSCROLLBAR| WS_EX_WINDOWEDGE;
m_pPlayWnd->CreateEx(m_dwExStyle,
oClassName,_T("Play"),
WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|
WS_CLIPSIBLINGS|WS_POPUP,
我的程序是这样的:一个dialog里面 new CPlaybackwnd
class CPlaybackwnd : public CWnd
在CPlaybackwnd这个里面, 增加,m_pVW->put_WindowStyle
,,
m_pVW->put_Owner((OAHWND)(GetSafeHwnd()));
但是,当把playbackwnd的属性,设置成dialog的WS_POPUP, WS_CHILD后,窗口移动时位置就不对了,
我在dialog里面增加了,
void CDialog::OnWindowPosChanged(WINDOWPOS* lpwndpos)
{
__super::OnWindowPosChanged(lpwndpos);
if (m_pPlayWnd)
{
int
x = m_nWnd_x + lpwndpos->x;
int
y = m_nWnd_y + lpwndpos->y;
int cx
= m_nWnd_cx;
int cy
= m_nWnd_cy;
m_pPlayWnd->MoveWindow(x,y,cx,cy);
}
}
但是,这个程序在win2000下会出现问题,其它操作系统是好的.
在win2000下,窗口坐标是乱了, 即dialog和playbackwnd的相对位置错误了,目前还没有解决.