當前2.2.1版本cocos creator發布的win32版本不是全屏的,
https://forum.cocos.org/t/win-exe/80429
https://blog.csdn.net/wudics/article/details/85346288
按照以上兩個好人的帖子可以解決visual studio發布問題(我也直接用的vs2017,沒用2019)以及win32在寫死的寬高下全屏問題,
那如何讓main.cpp里的
AppDelegate app(xx,xx);
兩個參數不寫死,而是獲取真實的屏幕尺寸呢,找到了調用windows api的一個辦法:
int cx = GetSystemMetrics(SM_CXSCREEN); int cy = GetSystemMetrics(SM_CYSCREEN);
但是發現程序啟動之后,雖然窗口是全屏了,但是實際渲染區域卻是在左下邊部分,右側和上側有大量的黑色空白區域,
后來用微信截圖工具一截圖發現寬高比上面拿到的cx,cy大許多,於是聯想到是否跟分辨率大小或者縮放有關系,然后發現的重點,就是因為當前的win10在“顯示設置”里更改了“縮放與布局”為“125%”,於是GetSystemMetrics()獲取到的是縮放之后的分辨率,而不是物理寬度和高度,要另外想辦法計算出顯示器的原始尺寸:
#include "main.h" #include "AppDelegate.h" USING_NS_CC; // uncomment below line, open debug console // #define USE_WIN32_CONSOLE int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); #ifdef USE_WIN32_CONSOLE AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); #endif // create the application instance //by jd, get the real screen size in windows //以下的cx,cy不通用,在設置了win10的屏幕縮放之后,下面2個參數是縮放之后的分辨率,不是原始的分辨率(物理寬度與高度) //int cx = GetSystemMetrics(SM_CXSCREEN); //int cy = GetSystemMetrics(SM_CYSCREEN); HWND hWnd = GetDesktopWindow(); HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); // 獲取監視器邏輯寬度與高度 MONITORINFOEX miex; miex.cbSize = sizeof(miex); GetMonitorInfo(hMonitor, &miex); int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left); int cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top); // 獲取監視器物理寬度與高度 DEVMODE dm; dm.dmSize = sizeof(dm); dm.dmDriverExtra = 0; EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm); int cxPhysical = dm.dmPelsWidth; int cyPhysical = dm.dmPelsHeight; // 縮放比例計算 實際上使用任何一個即可 //double horzScale = ((double)cxPhysical / (double)cxLogical); //double vertScale = ((double)cyPhysical / (double)cyLogical); AppDelegate app(cxPhysical, cyPhysical); app.start(); #ifdef USE_WIN32_CONSOLE FreeConsole(); #endif return 0; }
上面代碼里的horzScale或者vertScale去掉注釋之后測試正好是我之前設置的“縮放與布局”的值:“125%。
這樣算是實現了win10屏幕分辨率縮放之后也能全屏。