[{"data":1,"prerenderedAt":66},["ShallowReactive",2],{"page-全屏-1":3,"page-count-全屏":65},[4],{"id":5,"title":6,"body":7,"date":41,"description":13,"extension":42,"meta":43,"navigation":46,"path":58,"seo":59,"stem":60,"tags":61,"__hash__":64},"blogs\u002F_legacy\u002F2013\u002F2013-02-12-cocos2d-x%e5%85%a8%e5%b1%8f%e5%88%87%e6%8d%a2.md","cocos2d-x全屏切换",{"type":8,"value":9,"toc":37},"minimark",[10,14,17,20,23,34],[11,12,13],"p",{},"前段时间研究了下cocos2d-x的全屏功能，虽然勉强算是实现了，但是却没有办法进行全屏的切换。",[11,15,16],{},"一直都是参照着nehe的opengl教程学习gl的，切换全屏这个功能描述起来也不复杂，就是给rc换成切换之后的dc就可以了。但是其中牵涉到句柄啊什么的各种windows api的东西，这些东西只在操作系统中接触过，而且只是原理层，实在是看到就头大。而且cocos的音频引擎似乎也和hwnd相关，实际改动起来各种bug，完全摸不着头脑。",[11,18,19],{},"昨天把引擎的音频换成openal了，cocos貌似因为al是lgpl的协议没有支持这个好东西？不过这不是重点。这样一来切换全屏就只剩下wgl上的问题了。但是原来的思路依然是行不通呢，生成新的dc的过程中哪些资源应该被销毁，哪些资源应该保留完全靠自己试。虽然rc中的东西肯定是不用动了，但是dc相关的各个变量也足以让人dt。于是在试了一阵之后终于还是放弃在网上找了一个新的思路。",[11,21,22],{},"之所以要切换dc是为了销毁原来的窗口，生成全屏窗口，然后再把rc付上去。但其实windows还是提供了别的方法来做这些事情的。过程姑且不计，能看到效果就行。代码如下，需要切换的时候直接调用即可。",[24,25,30],"pre",{"className":26,"code":28,"language":29},[27],"language-text","bool CCEGLView::modifyscreenmode(){\n    static BOOL iswindow= !m_bFullScreen;\n    long style;\n    style=GetWindowLong(m_hWnd,GWL_STYLE);\n    if(iswindow=!iswindow)\n    {\n        ChangeDisplaySettings(NULL,0);                  \u002F\u002F If So Switch Back To The Desktop\n        style |= WS_OVERLAPPEDWINDOW;\n        style &= ~(WS_SIZEBOX|WS_MAXIMIZEBOX);\n        SetWindowLong(m_hWnd,GWL_STYLE,style );\n        SetWindowPos(m_hWnd,\n            HWND_NOTOPMOST,0,0,\n            m_width,\n            m_heigth,\n            SWP_SHOWWINDOW);\n        setFrameSize(m_width,m_heigth);\n    }\n    else\n    {\n        DEVMODE dmScreenSettings;    \u002F\u002F Device Mode\n        memset(&dmScreenSettings,0,sizeof(dmScreenSettings));   \u002F\u002F Makes Sure Memory's Cleared\n        dmScreenSettings.dmSize=sizeof(dmScreenSettings);    \u002F\u002F Size Of The Devmode Structure\n        dmScreenSettings.dmPelsWidth    = m_width;   \u002F\u002F Selected Screen Width\n        dmScreenSettings.dmPelsHeight   = m_heigth;  \u002F\u002F Selected Screen Height\n        dmScreenSettings.dmBitsPerPel   = 32;    \u002F\u002F Selected Bits Per Pixel\n        dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;\n\n        \u002F\u002F Try To Set Selected Mode And Get Results.  NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar.\n        if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)\n        {\n            \u002F\u002F If The Mode Fails, Offer Two Options.  Quit Or Use Windowed Mode.\n            if (MessageBox(NULL,L\"全屏模式在当前显卡上设置失败\\n使用窗口模式？\",L\"提示\",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)\n            {\n                iswindow=true;   \u002F\u002F Windowed Mode Selected.  Fullscreen = FALSE\n            }\n            else\n            {\n                \u002F\u002F Pop Up A Message Box Letting User Know The Program Is Closing.\n                MessageBox(NULL,L\"程序将会关闭.\",L\"错误\",MB_OK|MB_ICONSTOP);\n                return FALSE;    \u002F\u002F Return FALSE\n            }\n        }\n\n        SetWindowLong(m_hWnd,GWL_STYLE,style&(~WS_OVERLAPPEDWINDOW));\n        SetWindowPos(m_hWnd,\n            HWND_TOPMOST,0,0,\n            GetSystemMetrics(SM_CXSCREEN),\n            GetSystemMetrics(SM_CYSCREEN),\n            SWP_SHOWWINDOW);\n\n    }\n\n}\n","text",[31,32,28],"code",{"__ignoreMap":33},"",[11,35,36],{},"这样的话也不用原来那些繁琐的重建窗口了，就避免了很多麻烦。",{"title":33,"searchDepth":38,"depth":39,"links":40},2,3,[],"2013-02-12","md",{"layout":44,"status":45,"published":46,"author":47,"author_login":48,"author_email":49,"author_url":50,"wordpress_id":51,"wordpress_url":52,"date_gmt":53,"excerpt":54},"post","publish",true,{"display_name":48,"login":48,"email":49,"url":50},"chaoshikari","chaoshikari@gmail.com","\u002F",556,"\u002F\u002F?p=556","2013-02-12 08:15:00 +0000",{"type":8,"value":55},[56],[11,57,13],{},"\u002F2013-02-12-cocos2d-x全屏切换",{"title":6,"description":13},"_legacy\u002F2013\u002F2013-02-12-cocos2d-x%e5%85%a8%e5%b1%8f%e5%88%87%e6%8d%a2",[62,63],"cocos2d-x","全屏","qhyIQa8sDt7M2xU5K15oR6DuOhZn59QmkX6TEtKb2ME",1,1788763183076]