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);