Win7下 directshow 窗口模式退出全屏后黑屏

Win7下 directshow 窗口模式退出全屏后黑屏,使用的方法是put_FullScreenMode,据说是因为win7的桌面组合效果导致的。

解决方法:改为无窗口或仿真全屏。


仿真全屏:

HRESULT PlayVideo::PutFullScreen(HWND ghApp)
{
	HRESULT hr=S_OK;
   

    if (!bFullscreen)
    {
	// Save current message drain
        pVidWin->get_MessageDrain((OAHWND)NULL);

        // Set message drain to application main window
        pVidWin->put_MessageDrain((OAHWND) ghApp);
		pVidWin->put_Owner( (OAHWND) NULL);
		
		pVidWin->put_WindowStyle(0);

		pVidWin->put_WindowStyleEx(WS_EX_TOPMOST | WS_POPUP);
		pVidWin->SetWindowPosition(0,0,GetSystemMetrics(SM_CXSCREEN),
					    GetSystemMetrics(SM_CYSCREEN));//全屏显示
		bFullscreen = TRUE;
    }
    else
    {
		pVidWin->put_MessageDrain((OAHWND)NULL);
		pVidWin->put_Visible(OAFALSE);
		pVidWin->put_Owner((OAHWND)Owner);
		pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS|WS_CLIPCHILDREN);
		pVidWin->SetWindowForeground(OATRUE);
		OnSize();//调整视频窗口大小
        bFullscreen = FALSE;
    }

    return hr;
}

void PlayVideo::OnSize()
{
	HWND hwnd;
	CWnd *pcwnd;
	CRect rect;
	pVidWin->get_Owner((OAHWND*)&hwnd);
	pcwnd=CWnd::FromHandle(hwnd);
	pcwnd->GetClientRect(&rect);
	pVidWin->SetWindowPosition(rect.left ,rect.top ,
				  rect.right ,rect.bottom );
}



推荐使用无窗口模式。 微笑

http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/b8bf047d-8353-4b32-89a5-776bec85cb17/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值