windows全屏问题

Windows下如何全屏? 需注意几点:
1. 在CreateWindowEx中窗口风格设为WS_POPUP|WS_VISIBLE, 其它跟窗口模式一样;
2. 更改分辨率: 需定义一个函数:

None.gif bool ChangeScreenResolution (int width, int height, int bitsPerPixel)
None.gif{
None.gif    DEVMODE dmScreenSettings;
None.gif
None.gif    ZeroMemory (
& dmScreenSettings, sizeof (DEVMODE));
None.gif    dmScreenSettings.dmSize                
=  sizeof (DEVMODE);
None.gif    dmScreenSettings.dmPelsWidth        
=  width;
None.gif    dmScreenSettings.dmPelsHeight        
=  height;    
None.gif    dmScreenSettings.dmBitsPerPel        
=  bitsPerPixel;
None.gif    dmScreenSettings.dmFields            
=  DM_BITSPERPEL  |  DM_PELSWIDTH  |  DM_PELSHEIGHT;
None.gif    
if  (ChangeDisplaySettings ( & dmScreenSettings, CDS_FULLSCREEN)  !=  DISP_CHANGE_SUCCESSFUL)
None.gif        
return  false;
None.gif
None.gif    
return  true;
None.gif}

3. 从全屏中切换到桌面其它程序(eg. 按Alt+Tab)
因为切换前后分辨率不一样,需要改分辨率;
那程序怎样知道何时切换呢? 这里必须用到WM_ACTIVE消息,代码如下:
None.gif             case WM_ACTIVATE:
None.gif                    
if  (LOWORD (wParam)  ==  WA_INACTIVE)
None.gif                        ChangeDisplaySettings (NULL, 0);             // 如果离开本窗口,恢复原来的分辨率 
None.gif                    
else  ChangeScreenResolution ( 640 , 480 , 16 );   // ...
None.gif                    
break ;

4. 全屏与窗口如何实时切换? 下面是我的代码(按Alt+Enter切换),但是有个问题:如果以全屏初始化程序的话,第一次按Alt+Enter看到的窗口不带标题栏和边框. 再切换的话就正常了,并且窗口模式只能出现在屏幕(0,0)位置... 不知道咋回事,也许是xp的问题?
None.gif                  if  (fulscr  ==  TRUE) {
None.gif                    
/*  这些都没用 ~   */
None.gif                    int left
=  GetSystemMetrics(SM_CXSCREEN) / 2 - scr_w / 2 ;
None.gif                    int top 
=  GetSystemMetrics(SM_CYSCREEN) / 2 - scr_h / 2 ;
None.gif
None.gif          SetWindowLong(hwindow,GWL_STYLE,STYLEW);
None.gif                    SetWindowPos (hwindow, HWND_NOTOPMOST,
None.gif                        left, top, scr_w, scr_h,
None.gif                        SWP_SHOWWINDOW);
None.gif                    ChangeDisplaySettings (NULL, 0);
None.gif                    fulscr 
=  FALSE;
None.gif                }
None.gif                
else  {
None.gif          SetWindowLong(hwindow,GWL_STYLE,STYLEFS);
None.gif                    SetWindowPos (hwindow, HWND_TOPMOST, 0, 0, scr_w, scr_h,SWP_SHOWWINDOW);
None.gif                    ChangeScreenResolution (scr_w, scr_h, scr_bpp);
None.gif                    fulscr 
=  TRUE;
None.gif        }


* 如果你像我一样还碰到一个问题: 切换到桌面以后,桌面还有一个黑色的影子挥之不去怎么办? 这八成是因为窗口处于TOPMOST模式下,只要在ChangeDisplaySettings (NULL, 0)后面加一句,
SetWindowPos (hwindow, HWND_NOTOPMOST,
                0, 0, 0, 0,
                SWP_SHOWWINDOW);
即可.

转载于:https://www.cnblogs.com/euclid/archive/2007/05/03/735087.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值