我先创建了一个IGraphBuilder接口,查询IVideoWindow,然后render一个文件,把IVideoWindow的owner设为一个dialog,把它的风格设为"WS_CHILD| WS_CLIPSIBLINGS",然后开始播放。
但是实际的结果是:视频播放的窗口不是我指定的dialog的子窗口。这个窗口是一个单独的一个新窗口,而且这个新窗口会自动最小化到任务栏上。
另外一个问题是,我的应用程序会重绘dialog client的rectangle,我如何才能避免重绘这个视频窗口?有什么参数可以让我设置吗(比如把这个窗口设置为always on top)
几乎相同的代码,在Windows XP下使用是正常的,在WinCE上就有这些奇怪的现象。请大牛指点。
- hr = m_pGraph->RenderFile(str_filename,NULL);
- if(FAILED(hr))
- {
- AfxMessageBox(TEXT("can not open the fail"));
- return FALSE;
- }
-
- //////////////////////////////////////////////////////////////
- // set vidio window owner and window position
- hr = m_pVidWin->put_Owner((OAHWND) (this->GetSafeHwnd()) );
- if (SUCCEEDED(hr))
- {
- // The video window must have the WS_CHILD style
- hr = m_pVidWin->put_WindowStyle( WS_POPUP | WS_BORDER );
- if(FAILED(hr))
- {
- AfxMessageBox(TEXT("put_WindowStyle "WS_CHILD | WS_CLIPSIBLINGS" fail"));
- }
- // Read coordinates of video container window
- RECT rc;
- this->GetClientRect(&rc);
- long width = rc.right - rc.left;
- long height = rc.bottom - rc.top - 50;
-
- // Ignore the video's original size and stretch to fit bounding rectangle
- hr = m_pVidWin->SetWindowPosition(rc.left, rc.top, width, height);
- if(FAILED(hr))
- {
- AfxMessageBox(TEXT("m_pVidWin SetWindowPosition fail"));
- return FALSE;
- }
- } else
- {
- AfxMessageBox(TEXT("put_Owner fail"));
- return FALSE;
- }
-
- // let window visible
- hr = m_pVidWin->put_Visible(OATRUE);
- if(FAILED(hr))
- {
- AfxMessageBox( _T("put_Visible: OATRUE fail"));
- }
-
- // start play !!!
- hr = m_pControl->Run();
- if(FAILED(hr))
- {
- CString errmsg;
- errmsg = _T("play video") + str_filename + _T("fail");
- AfxMessageBox( errmsg );
- }