- Creator 版本:2.2.1
环境:Windows10
我遇到了和你一样的问题,先是看别人帖子说的改几处cpp代码,发现main.cpp里 AppDelegate app(2559, 1439)里如果填写的是当前显示器用微信截图量出来的宽高,那么程序运行后就刚刚好,尝试过按照:
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
这种获取分辨率的方式,但其实并不是实际的显示器的尺寸,所以还是不行
找到原因和办法了,是因为当前的win10在“显示设置”里更改了“缩放与布局”,于是遇到了这些问题,
办法就是不用GetSystemMetrics(),另外想办法计算出显示器的原始尺寸:
已下是要修改的main.cpp代码:
#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;
}
2赞
感谢,我已经解决问题,也是计算了缩放比解决的。
为什么我这个方案不行,我的版本是2.3.3
求解决方法