void adulst_display(WORD x, WORD y)
{
DEVMODE DevMd;
DevMd.dmSize=sizeof(DevMd);
DevMd.dmPelsWidth=x; //水平像素
DevMd.dmPelsHeight=y; //垂直像素
DevMd.dmBitsPerPel=32; //32位真彩
DevMd.dmDisplayFrequency = 75; //刷新率Hz
DevMd.dmFields = DM_PELSWIDT|DM_PELSHEIGHT;
long v=ChangeDisplaySettings(&DevMd,0); //临时修改设置
if(v==DISP_CHANGE_SUCCESSFUL)
{
ChangeDisplaySettings(&DevMd,CDS_UPDATEREGISTRY); //永久的修改设置
}
else
{
MessageBox("不支持!");
ChangeDisplaySettings(NULL,0);
}
}
调用时输入x,y,比如1024,768就可以设置分辨率了
界面在不同分辨率下的显示确实是一个比较头疼的问题。下面贴一个完整的代码,作用是首先罗列系统支持的所有分辨率模式,如果不支持1024*768给出提示,如果支持但当前设置不是1024*768则给出是否更改的提示。
-
C/C++ code
-
// ---------------罗列系统支持的分辨率---------------------------- DEVMODE * lpDevMode; lpDevMode = new DEVMODE; int i = 0 ; CString Str[ 500 ]; CString str; BOOL Result = EnumDisplaySettings(NULL,i,lpDevMode); while (Result) { str.Format( " %d " ,lpDevMode -> dmPelsWidth); lpDevMode = new DEVMODE; Result = EnumDisplaySettings(NULL, ++ i,lpDevMode); Str[i] = str; } delete lpDevMode; int kkk = 0 ; for ( int j = 0 ;j < 500 ;j ++ ) { if (Str[j] == " 1024 " ) { kkk = 1 ; break ; } } if (kkk == 0 ) { MessageBox( " 您的系统分辨率不支持1024*768,程序运行时有些界面可能不能完全显示。 " , " 提示 " ); } // -------------------------------------------------------------- // -------------------------检测系统当前分辨率-------------------- HDC screenDC; int colorBits,xRes,yRes,refresh; screenDC = CreateDC( " DISPLAY " , NULL, NULL, NULL); colorBits = GetDeviceCaps(screenDC, BITSPIXEL); // 获得系统颜色数 xRes = GetDeviceCaps(screenDC, HORZRES); // 获得水平像素值 yRes = GetDeviceCaps(screenDC, VERTRES); // 获得垂直像素值 refresh = GetDeviceCaps(screenDC,VREFRESH); CString metricsX,metricsY,colorStr,refreshStr; colorStr.Format( " %d " ,colorBits); metricsX.Format( " %d " ,xRes); metricsY.Format( " %d " ,yRes); refreshStr.Format( " %d " ,refresh); theApp.colorBits = colorBits; theApp.xRes = xRes; theApp.yRes = yRes; theApp.refresh = refresh; if (xRes < 1024 ) { int changeSetting = MessageBox( " 您的屏幕分辨率低于1024×768。本系统建议在1024×768模式下运行。/n安全退出系统后,会自动恢复当前设置。/n是否改变当前系统分辨率? " , " 改变设置 " ,MB_ICONINFORMATION | MB_YESNO); if (changeSetting == IDYES) { DEVMODE lpDevMode; lpDevMode.dmBitsPerPel = colorBits; lpDevMode.dmPelsWidth = 1024 ; lpDevMode.dmPelsHeight = 768 ; lpDevMode.dmDisplayFrequency = refresh; lpDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY; LONG lResult = ChangeDisplaySettings( & lpDevMode, 0 ); if (lResult != DISP_CHANGE_SUCCESSFUL) { MessageBox( " 屏幕分辨率更改失败,可能是您的设备不支持此分辨率。 " , " 更改设置失败 " ,MB_ICONWARNING); } DeleteDC(screenDC); } DeleteDC(screenDC); } else { DeleteDC(screenDC);