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的相對位置錯誤了,目前還沒有解決.