调整屏幕分辨率

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、付费专栏及课程。

余额充值