窗口永远绘制在最顶上,就算有DX全屏

swlilike 2013-01-21 04:41:54
如题,
MFC的绘制机理不适用当DX全屏的时候显示,
看到之前有人说可以用 dialogbox 显示,作为窗口子类,可是那样的话就等于重写了一个消息机制呢,有点费劲啊,求支招
...全文
275 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
swlilike 2013-01-31
  • 打赏
  • 举报
回复
谢谢各位,最后用DXhook的方式解决了。学习了!
sumos 2013-01-22
  • 打赏
  • 举报
回复
在玩全屏游戏或者全屏视频的时候,qq是不会置顶的(qq会判断当前是否有全屏程序,如果没有,就会有一个定时器,不断的SetWindowPos HWND_TOPMOST)。 搜狗输入法在全屏视频的情况下,还是会置顶,我去spy++抓一下,果然也是有个定时器。
zhouzhipen 2013-01-22
  • 打赏
  • 举报
回复
LZ 这要看DX的绘图方式,如果是采用全屏独占的方式,你的对话框就会一闪闪的,因为DX是直接在主表面(直接对应显存)绘制的,会覆盖屏幕上任何图形,最方便的就是先暂停DX的绘制,然后再显示话框。
swlilike 2013-01-22
  • 打赏
  • 举报
回复
引用 3 楼 z8323664 的回复:
引用 2 楼 swlilike 的回复:引用 楼主 swlilike 的回复:如题, MFC的绘制机理不适用当DX全屏的时候显示, 看到之前有人说可以用 dialogbox 显示,作为窗口子类,可是那样的话就等于重写了一个消息机制呢,有点费劲啊,求支招 不是全屏不全屏的问题, 在应该显示窗口的区域,MFC对话框和DX绘制的 冲突了,导致一闪一闪的,看不到MFC对……
窗口风格?这样式太多啦。。给个参考意见啊。。
z8323664 2013-01-21
  • 打赏
  • 举报
回复
引用 2 楼 swlilike 的回复:
引用 楼主 swlilike 的回复:如题, MFC的绘制机理不适用当DX全屏的时候显示, 看到之前有人说可以用 dialogbox 显示,作为窗口子类,可是那样的话就等于重写了一个消息机制呢,有点费劲啊,求支招 不是全屏不全屏的问题, 在应该显示窗口的区域,MFC对话框和DX绘制的 冲突了,导致一闪一闪的,看不到MFC对话框,
我以前也遇到过这个问题, 好像修改一下窗口风格就不会闪了。 慢慢试吧
swlilike 2013-01-21
  • 打赏
  • 举报
回复
引用 楼主 swlilike 的回复:
如题, MFC的绘制机理不适用当DX全屏的时候显示, 看到之前有人说可以用 dialogbox 显示,作为窗口子类,可是那样的话就等于重写了一个消息机制呢,有点费劲啊,求支招
不是全屏不全屏的问题, 在应该显示窗口的区域,MFC对话框和DX绘制的 冲突了,导致一闪一闪的,看不到MFC对话框,
jimette 2013-01-21
  • 打赏
  • 举报
回复
所谓全屏,实际上是把窗变大,让窗框跑到屏幕以外。 窗的原点不在 [0,0], 而在 [-d, -d], d 为 窗框 边的宽度,窗的对角点在 [w+d,h+d]。w -- 屏幕宽度,h -- 屏幕高度, 或者说,画一个既无菜单,又无框的窗。 MFC 用 CMainFrame * pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); pFrame->ShowWindow(SW_MAXIMIZE); 就可实现。 恢复正常大小用: pFrame->ShowWindow(SW_SHOWNORMAL); ------------------------------------- Direct3D: 全屏: D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = FALSE; // 自己定桌面宽度或用 GetSystemMetrics(SM_CXSCREEN) 获得 桌面宽度 d3dpp.BackBufferWidth = 800; //自己定桌面高度或用 GetSystemMetrics(SM_CYSCREEN) 获得 桌面高度 d3dpp.BackBufferHeight= 600; // 如果你的图卡支持,你可以定义更好的格式: d3dpp.BackBufferFormat = D3DFMT_R5G6B5; // 然后用 d3dpp 建 device ----------------- Direct3D: 非全屏: D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // 然后用 d3dpp 建 device

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧