Videowindow:
directshow播放畫(huà)面刷新問(wèn)題,
開(kāi)始播放后畫(huà)面會(huì)出來(lái),一切正常。現(xiàn)在的問(wèn)題是
當(dāng)別的未最大化的窗口半遮或全遮住視頻窗口,畫(huà)面不都能正常刷新, 只有拖動(dòng)一下dialog畫(huà)面才會(huì)出來(lái)
但是:當(dāng)此dialog最小化,再恢復(fù)時(shí), 能正常刷新
我出現(xiàn)的問(wèn)題,和下列問(wèn)題都不相同,導(dǎo)致處理方法也不相同.
大多數(shù)刷新問(wèn)題,都可以從下面這個(gè)帖子,去解決.
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 不用動(dòng)
4、OnEraseBkgnd 加如下代碼
RECT rect;
GetDlgItem(IDC_VW_FRAME)->
GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->
ExcludeClipRect(&rect);
return
CDialog::OnEraseBkgnd(pDC);
可是我的窗口不要上面這四條,只要把窗口屬性設(shè)置成
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,
我的程序是這樣的:一個(gè)dialog里面 new CPlaybackwnd
class CPlaybackwnd : public CWnd
在CPlaybackwnd這個(gè)里面, 增加,m_pVW->put_WindowStyle
,,
m_pVW->put_Owner((OAHWND)(GetSafeHwnd()));
但是,當(dāng)把playbackwnd的屬性,設(shè)置成dialog的WS_POPUP, WS_CHILD后,窗口移動(dòng)時(shí)位置就不對(duì)了,
我在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);
}
}
但是,這個(gè)程序在win2000下會(huì)出現(xiàn)問(wèn)題,其它操作系統(tǒng)是好的.
在win2000下,窗口坐標(biāo)是亂了, 即dialog和playbackwnd的相對(duì)位置錯(cuò)誤了,目前還沒(méi)有解決.