在Windows下让游戏窗口全屏

news/2025/1/15 22:09:03/

原文地址:http://www.eoeandroid.com/thread-250863-1-1.html


參考了一下NeHe 的教程, 在 cocos2d-x 2.0 上可以做點小手腳在 Windows 上全屏顯示!
主要修改兩個檔案:

CCEGLView.h
CCEGLView.cpp
它們在工程里的位置是 libcocos2d->platform->win32
先打開 CCEGLView.h

在 public: 底下加上一個新功能:

void setFullScreen(bool flag);

另外在  private: 里加上一個新變數:

bool m_bFullScreen;

接下來是 CCEGLView.cpp:

在 Constructor 加上 m_bFullScreen 的初始值:

CCEGLView::CCEGLView(): m_bCaptured(false), m_hWnd(NULL), m_hDC(NULL), m_hRC(NULL), m_lpfnAccelerometerKeyHook(NULL), m_bFullScreen(false)

再加上我們的 setFullScreen():

void CCEGLView::setFullScreen(bool flag)
{    
    m_bFullScreen = flag;
}
然後在 Create() 里, 把CreateWindowEx() 那段改成下邊這樣:

  1. /// FULLSCREEN HACK - BEGIN
  2. DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;  // Window Extended Style
  3. DWORD dwStyle = WS_CAPTION | WS_POPUPWINDOW | WS_MINIMIZEBOX;  // Window Style
  4. if (m_bFullScreen)
  5. {
  6.         DEVMODE dmScreenSettings; // Device Mode
  7.         memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared
  8.         dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure
  9.         dmScreenSettings.dmPelsWidth = w;  // Selected Screen Width
  10.         dmScreenSettings.dmPelsHeight = h;  // Selected Screen Height
  11.         dmScreenSettings.dmBitsPerPel = 32;  // Selected Bits Per Pixel
  12.         dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
  13.         // Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
  14.         if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
  15.         {
  16.                 // If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.
  17.                 if (MessageBox(NULL, L"The Requested Fullscreen Mode Is Not Supported BynYour Video Card. Use Windowed Mode Instead?",L"cocos2d-x",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
  18.                 {
  19.                         setFullScreen(false);  // back to windowed mode
  20.                 }
  21.                 else
  22.                 {
  23.                         // Pop Up A Message Box Letting User Know The Program Is Closing.
  24.                         MessageBox(NULL,L"Program Will Now Close.",L"ERROR",MB_OK|MB_ICONSTOP);
  25.                         return FALSE;    // Return FALSE
  26.                 }
  27.         }
  28.         else        // yeah! we are in fullscreen
  29.         {
  30.                 dwExStyle = WS_EX_APPWINDOW;
  31.                 dwStyle=WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;                                                                                
  32.                                 
  33.                 //ShowCursor(FALSE);
  34.                 RECT rect;
  35.                 rect.left=(long)0;   // Set Left Value To 0
  36.                 rect.right=(long)w;  // Set Right Value To Requested Width
  37.                 rect.top=(long)0;  // Set Top Value To 0
  38.                 rect.bottom=(long)h;  // Set Bottom Value To Requested Height
  39.                 AdjustWindowRectEx(&rect, dwStyle, FALSE, dwExStyle);  // Adjust To True Requested Size
  40.         }
  41. }
  42. /// FULLSCREEN HACK - END
  43. // create window
  44. m_hWnd = CreateWindowEx(
  45.     dwExStyle,                   // Extended Style For The Window
  46.     kWindowClassName,    // Class Name
  47.     wszBuf,                        // Window Title
  48.     dwStyle,                     // Defined Window Style
  49.     0, 0,                           // Window Position
  50.     0,                               // Window Width
  51.     0,                               // Window Height
  52.     NULL,                         // No Parent Window
  53.     NULL,                         // No Menu
  54.     hInstance,                  // Instance
  55.     NULL );
  56. CC_BREAK_IF(! m_hWnd);


基本上這樣已搞定.

最後在我們自己項目的 main.cpp 里選擇全屏即可:

    AppDelegate app;CCEGLView& eglView = CCEGLView::sharedOpenGLView();eglView.setFullScreen(true);eglView.setViewName("Hello Tests");eglView.setFrameSize(1920, 1080);

要注意事項:

- eglView.setFullScreen(true) 一定要在 eglView.setViewName("xxx") 前面.
- eglView.setFrameSize(1920, 1080) 設定的大小, 一定要是顯卡可以支持的.
- 不能再用CCDirector::sharedDirector()->enableRetinaDisplay(true)


http://www.ppmy.cn/news/648603.html

相关文章

CocosCreator h5游戏移动端全屏显示

文章里的方法主要是针对creator游戏引擎的构建后项目,但是也可以由此文章中的方法,再作针对其他h5游戏引擎的修改,由此借鉴出其他h5游戏引擎的全屏显示。 先来看构建后的文件结构: 其中,红色框里的文件是需要自定义的&…

【Unity游戏开发基础】如何通过游戏菜单控制游戏全屏显示

【脚本】 public void SetFullscreen (bool isFullscreen) {Screen.fullScreen isFullscreen; }其中Screen是游戏本身的对象,fullScreen是Screen的属性,这个函数其实什么都没做,就是通过传参isFullscreen,来设置Screen的fullScr…

UE4-编辑器模式下VR预览运行时,如何全屏显示游戏窗口。(不是打包后的全屏显示)

有一个需求,要在头盔里录屏,即在编辑器里以VR预览模式运行游戏 然后在头盔里 录屏,由于UE4编辑器里默认的VR预览播放后窗口大小为1280*720,不能全部覆盖我的显示器,想要全屏录制显示必须手动全屏显示,每次…

游戏全屏模式

游戏全屏模式 把游戏设置为全屏模式,你的浏览器将消失,你的游戏将占据整个桌面空间。但不会改变桌面的分辨率。如果你想让你的游戏占据整个桌面的话,你就要处理一些必要的缩放比例。进入全屏模式,你要设置IsFullScreen为true…

游戏开始了------全屏与横屏

现在大概是要做个3D第三人称视角的对战类游戏,其实已经做了很久了,可后来发现设计有问题,现在返工重新再来。另外本人的java编程能力有限,并没有认真学过java,都是做到哪学到哪的,也还没工作,尚…

计算机自带游戏怎么调,如何设置电脑游戏全屏?

全屏的游戏带给玩家视野很开阔的感觉,然后当游戏不能全屏时,往往会降低游戏的可观性,也会使玩家对游戏丧失一些兴趣,当我们的电脑有wind xp 升级为wind 7时,就发现游戏不能全屏了,怎么调节都不能全屏&#…

游戏全屏设置

游戏全屏设置 打开注册表regeditHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\Configuration\在Configuration这上面右键,选择查找,输入Scaling,在右框找到scaling,右键scaling修改将数值改为3即可&#xf…

【Android游戏开发之一】设置全屏以及绘画简单的图形

李华明Himi 原创,转载务必在明显处注明: 转载自 【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/263.html 很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有…