[{"data":1,"prerenderedAt":64},["ShallowReactive",2],{"\u002F2013-02-12-cocos2d-x%E5%85%A8%E5%B1%8F%E5%88%87%E6%8D%A2":3},{"id":4,"title":5,"body":6,"date":40,"description":12,"extension":41,"meta":42,"navigation":45,"path":57,"seo":58,"stem":59,"tags":60,"__hash__":63},"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":7,"value":8,"toc":36},"minimark",[9,13,16,19,22,33],[10,11,12],"p",{},"前段时间研究了下cocos2d-x的全屏功能，虽然勉强算是实现了，但是却没有办法进行全屏的切换。",[10,14,15],{},"一直都是参照着nehe的opengl教程学习gl的，切换全屏这个功能描述起来也不复杂，就是给rc换成切换之后的dc就可以了。但是其中牵涉到句柄啊什么的各种windows api的东西，这些东西只在操作系统中接触过，而且只是原理层，实在是看到就头大。而且cocos的音频引擎似乎也和hwnd相关，实际改动起来各种bug，完全摸不着头脑。",[10,17,18],{},"昨天把引擎的音频换成openal了，cocos貌似因为al是lgpl的协议没有支持这个好东西？不过这不是重点。这样一来切换全屏就只剩下wgl上的问题了。但是原来的思路依然是行不通呢，生成新的dc的过程中哪些资源应该被销毁，哪些资源应该保留完全靠自己试。虽然rc中的东西肯定是不用动了，但是dc相关的各个变量也足以让人dt。于是在试了一阵之后终于还是放弃在网上找了一个新的思路。",[10,20,21],{},"之所以要切换dc是为了销毁原来的窗口，生成全屏窗口，然后再把rc付上去。但其实windows还是提供了别的方法来做这些事情的。过程姑且不计，能看到效果就行。代码如下，需要切换的时候直接调用即可。",[23,24,29],"pre",{"className":25,"code":27,"language":28},[26],"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",[30,31,27],"code",{"__ignoreMap":32},"",[10,34,35],{},"这样的话也不用原来那些繁琐的重建窗口了，就避免了很多麻烦。",{"title":32,"searchDepth":37,"depth":38,"links":39},2,3,[],"2013-02-12","md",{"layout":43,"status":44,"published":45,"author":46,"author_login":47,"author_email":48,"author_url":49,"wordpress_id":50,"wordpress_url":51,"date_gmt":52,"excerpt":53},"post","publish",true,{"display_name":47,"login":47,"email":48,"url":49},"chaoshikari","chaoshikari@gmail.com","\u002F",556,"\u002F\u002F?p=556","2013-02-12 08:15:00 +0000",{"type":7,"value":54},[55],[10,56,12],{},"\u002F2013-02-12-cocos2d-x全屏切换",{"title":5,"description":12},"_legacy\u002F2013\u002F2013-02-12-cocos2d-x%e5%85%a8%e5%b1%8f%e5%88%87%e6%8d%a2",[61,62],"cocos2d-x","全屏","qhyIQa8sDt7M2xU5K15oR6DuOhZn59QmkX6TEtKb2ME",1788763183069]