调整屏幕分辨率

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值