在Windows下让游戏窗口全屏
来源:互联网 发布:mysql 统计重复数据 编辑:程序博客网 时间:2024/05/01 07:51
原文地址: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() 那段改成下邊這樣:
基本上這樣已搞定.
- /////////////// FULLSCREEN HACK - BEGIN
- DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // Window Extended Style
- DWORD dwStyle = WS_CAPTION | WS_POPUPWINDOW | WS_MINIMIZEBOX; // Window Style
- if (m_bFullScreen)
- {
- DEVMODE dmScreenSettings; // Device Mode
- memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared
- dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure
- dmScreenSettings.dmPelsWidth = w; // Selected Screen Width
- dmScreenSettings.dmPelsHeight = h; // Selected Screen Height
- dmScreenSettings.dmBitsPerPel = 32; // Selected Bits Per Pixel
- dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
- // Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.
- if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
- {
- // If The Mode Fails, Offer Two Options. Quit Or Use Windowed Mode.
- 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)
- {
- setFullScreen(false); // back to windowed mode
- }
- else
- {
- // Pop Up A Message Box Letting User Know The Program Is Closing.
- MessageBox(NULL,L"Program Will Now Close.",L"ERROR",MB_OK|MB_ICONSTOP);
- return FALSE; // Return FALSE
- }
- }
- else // yeah! we are in fullscreen
- {
- dwExStyle = WS_EX_APPWINDOW;
- dwStyle=WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
- //ShowCursor(FALSE);
- RECT rect;
- rect.left=(long)0; // Set Left Value To 0
- rect.right=(long)w; // Set Right Value To Requested Width
- rect.top=(long)0; // Set Top Value To 0
- rect.bottom=(long)h; // Set Bottom Value To Requested Height
- AdjustWindowRectEx(&rect, dwStyle, FALSE, dwExStyle); // Adjust To True Requested Size
- }
- }
- /////////////// FULLSCREEN HACK - END
- // create window
- m_hWnd = CreateWindowEx(
- dwExStyle, // Extended Style For The Window
- kWindowClassName, // Class Name
- wszBuf, // Window Title
- dwStyle, // Defined Window Style
- 0, 0, // Window Position
- 0, // Window Width
- 0, // Window Height
- NULL, // No Parent Window
- NULL, // No Menu
- hInstance, // Instance
- NULL );
- 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)
- 在Windows下让游戏窗口全屏
- 如何在windows下使DOS窗口最大化(全屏)
- 在WinCe下如何让程序全屏
- 在WinCe下如何让程序全屏
- 在WinCe下如何让程序全屏
- C#子窗口在多文档窗口下全屏显示
- 游戏窗口模式和全屏模式的区别在哪?
- Windows Mobile 窗口全屏
- windows mobile下实现非全屏窗口显示
- windows mobile下实现非全屏窗口显示
- [MFC]如何让窗口全屏
- 【Windows】Windows7下游戏全屏问题通用解决方法
- 让一些游戏变成全屏
- 让Flex在全屏模式下支持键盘输入
- ubuntu 下让gvim 自动最大化 全屏及隐藏菜单和工具栏 mac windows 全屏显示
- 在Win32下让窗口居中
- 解决笔记本在Win7系统下不能全屏游戏
- 解决笔记本在Win7系统下不能全屏游戏
- 方程求解
- android 中实现FlowLayout 顺序布局方法
- unity体感游戏--接钻石游戏(二)游戏倒计时
- MyEclipse安装findBugs插件
- 根据系统当前cup个数设置nginx的工作进程数。
- 在Windows下让游戏窗口全屏
- itoa
- 【SCOI2012】【kruscal变形】滑雪与时间胶囊
- 系统备份apk路径
- VS写Webservice时候如果要让用户调用你写的函数
- 过驱动保护第一套视频(63课)
- innobackupex的备份参数解析
- 高仿优酷Android客户端图片左右滑动(自动切换)
- eclipse的vss插件报Failed to create Ole Client. result = -2147221164问题解决