ubuntu12.10,游戏启动是全屏的,但是显示不全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu12.10,游戏启动是全屏的,但是显示不全相关的知识,希望对你有一定的参考价值。

大概只能显示2/3,其余部分跑到屏幕外面去了。
好像是有设置分辨率的选项,可是那一部分跑到屏幕外面了,看不到。
我会试试修改游戏文件。
从系统的角度有没有办法呢

猜测一下吧,会不会是游戏内的分辨率设置太大超出了系统分辨率导致的,你可以尝试将游戏内的分辨率设置的和系统一样试试。追问

是由于分辨率挡住的

但是调分辨率的选项被挡住了,看到不。

追答

在游戏目录里找配置文件,直接修改试试。

参考技术A 游戏内的分辨率设置太大超出了系统分辨率导致的吧 参考技术B ubuntu 玩wow 郁闷啊

判断当前窗口是否是全屏的山寨版和官方版

山寨版很好很强大:

简单介绍一下,这是我用过的,获取屏幕的四个顶点(具体检测的时候可以向屏幕的中心剪一个像素,譬如检测 1,1而不是0,0)所在窗口的句柄,如果四个句柄都相同,则认为是全屏状态,其实有个问题,有些程序全屏的时候,还会有窗口弹出来,典型的像播放软件,全屏的时候,下面还有一个工具栏,这个工具栏和后面的播放窗口是不同的,所以检测失败了。对这种方法加强就是,获取四个点窗口所在的进程PID,如果PID想同,则认为是全屏,但是仍然有问题,检测explorer的时候就直接认为是全屏了,呵呵,所以要过滤。总之实现简单,但是不准,不推荐使用。

 

官方的推荐做法:

注册一个Appbar(桌面工具栏)是类似微软视窗系统的任务条的窗口。它紧靠屏幕边缘,典型的桌面工具栏包括快速访问其他应用程序和窗口的按钮。系统会防止其他应用程序使用被appbar占用的区域。在任何时刻桌面都可以同时共存多个appbar。

使用的API:

SHAppBarMessage

WINSHELLAPI UINT APIENTRY SHAppBarMessage(

                        DWORD dwMessage,

                        PAPPBARDATA pData);

这个API可以向系统发送一个appbar message(也就是dwMessage,有很多消息,可以查阅MSDN),然后系统通过pData返回你想知道的信息,这里我们主要用这个API来注册一个新的appbar。这里还需要关注的是APPBARDATA这个结构体。

 

检测全屏的具体实现。

这里要先通过调用SHAppBarMessage(ABM_NEW, &abd)来注册一个appbar,代码如下:

 

[cpp] view plain copy
 
  1. APPBARDATA abd;  
  2. memset(&abd, 0, sizeof(abd));  
  3.   
  4. // Specify the structure size and handle to the appbar.  
  5. abd.cbSize = sizeof(APPBARDATA);  
  6. abd.hWnd = hwndAccessBar;  
  7.   
  8. abd.uCallbackMessage = MSG_APPBAR_MSGID;  
  9.   
  10. !::SHAppBarMessage(ABM_NEW, &abd);  

 

注意MSG_APPBAR_MSGID这个,这是你自己定义的消息ID,当有全屏创建或者取消的时候,会给句柄为hwndAccessBar的窗口发送消息ID为MSG_APPBAR_MSGID的消息,具体到全屏消息,此时WPARAM为ABN_FULLSCREENAPP,而LPARAM则能够判断当前是有窗口全屏了还是有窗口取消全屏了,(BOOL) lParam为TRUE表示有窗口全屏了,而(BOOL) lParam为FALSE则表示有窗口取消全屏状态了。代码如下:

 

[cpp] view plain copy
 
  1. LRESULT CWinHook::WindowProc(UINT msg, WPARAM wp, LPARAM lp)  
  2. {  
  3.     if (MSG_APPBAR_MSGID == msg)  
  4.     {  
  5.         switch((UINT)wp)  
  6.         {  
  7.         case ABN_FULLSCREENAPP:  
  8.             {  
  9.                 if (TRUE == (BOOL)lp)  
  10.                 {  
  11.                     TRACE(TEXT("一个窗口全屏了/n"));  
  12.                     KAppBarMsg::m_bFullScreen = TRUE;  
  13.                 }  
  14.                 else  
  15.                 {  
  16.                     TRACE(TEXT("一个窗口取消全屏了/n"));  
  17.                     KAppBarMsg::m_bFullScreen = FALSE;  
  18.                 }  
  19.             }  
  20.             break;  
  21.         default:  
  22.             break;  
  23.         }  
  24.     }  
  25.       
  26.     return CSubclassWnd::WindowProc(msg, wp, lp);  
  27. }  

 

 

 


 

附注:后来发现vista下面没有XP下灵敏,不知道怎么回事,vista下偶尔会失败,很奇怪。

 

参考MSDN2005:

APPBARDATA Structure
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/structures/appbardata.htm

ABM_NEW Message
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/messages/abm_new.htm

ABN_FULLSCREENAPP Notification
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/messages/abn_fullscreenapp.htm

 

http://blog.csdn.net/magictong/article/details/4085477

以上是关于ubuntu12.10,游戏启动是全屏的,但是显示不全的主要内容,如果未能解决你的问题,请参考以下文章

如果之前是全屏的,如何全屏打开html 5视频

mui页面全屏显示,页面覆盖手机顶部的信号栏电池栏,一般用于启动页和引导页

虚拟机上安装了Linux怎么桌面不能全屏?刚安上了是全屏的,上课回来就不能全屏呢!!!!!!!!很伤心啊

w21微信小程序不能全屏显示?

我设置的一个div背景是全屏的,div里面有图片、input、select、option等标签要一行居中显示怎么写。。

我用html5的video标签做的视频页面,在iphone上测试的时候视频都是全屏的,怎么才能不全屏?