QQ登录

只需一步,快速开始

上位机VC MFC动态设置桌面分辨率

[ 复制链接 ]
图片1.jpg
功能展示当前例程通过代码动态的设置桌面的分辨率,在设置之前可获取当前系统可使用的有效分辨率,这样设置时才不会出错。例程效果如图,点击<获取桌面可用分辨率>可将获取的全部有效值显示到组合框中,长*宽*像素颜色。点击<设置选中分辨>可将选择的分辨率进行设置
要点提示
动态设置屏幕分辨率,可以事先获取全部有效的分辨率,然后根据需求设置,才能够确保设置成功;
调用EnumDisplaySettings得到显示设备的一个图形模式设备,通过对该函数一系列的调用可以得到显示设备所有的图形模式信息。
函数原型:BOOLEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, LPDEVMODElpDevMode);
lpszDeviceName:指向一个以null的结尾的字符串,该字符串指定了显示设备。此函数将获得该显示设备的图形模式信息。该参数可以为NULL。NULL值表明调用线程正运行在计算机的当前显示设备上。如果lpszDeviceName为NULL,该字符串的形式为\\.\displayx,其中x的值可以为1、2或3。对于Windows 95和Windows 98,lpszDeviceName必须为NULL。
iModeNum:表明要检索的信息类型,该值可以是一个图形模式索引,也可以是下列一值:
ENUM_CURRENT_SETTINGS:检索显示设备的当前设置。
ENUM_REGISTRY_SETTINGS:检索当前存储在注册表中的显示设备的设置。
图形模式索引值从零开始,要得到一个显示设备的所有图形模式信息,可以一系列地调用EnumDisplaySettings函数,并且iModeNum显为一个非零值时,则函数返回的信息是最近一次使用iModeNum置为零调用该函数时存储的信息。
lpDevMode:DEVMODE结构的指针,该结构存储指定图形模式的信息,在调用EnumDisplaySettings之前,设置dmSize为sizeof(DEVMODE),并且以字节为单位,设置dmDriveExtra元素为接收专用驱动数据可用的附加空间。
EnumDisplaySettings函数设置如下五个DEVMODE元素的值:dmBitsPerpel、dmPelsWidth、dmPelsHeight、dmDisplayFlags、dmDisplayFrequency。
返回值:如果成功,返回非零值;如果失败,返回零。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
注释:如果iModeNum大于显示设备最后的图形模式索引,那么函数就会失败,如同在iModeNum参数中描述的那样,使用这种方法可以枚举显示设备所有的图形模式。CDS_UPDATEREGISTRY:表明当前屏幕的图形模式会动态地变化,并且该图形模式会更新注册表。该模式信息存贮在用户档案中。
CDS_TEST:系统检测是否要设置被请求的图形模式。
CDS_FULLSCREEN:从本质上讲该模式是暂时的。
CDS_GLOBAL:该设置保存在全局设置区域内, 因此它们会影响所有的用户。该标志仅在与标志一起使用时才有效。CDS_SET_PRIMARY:该设备成为首要设备。
CDS_RESET:设置要改变,即使请求的设置与当前设置一样。CDS_NORESET:设置保存在注册表中,但是它不起作用,该标志只有与CDS_UPDATEREGISTRY标志一起使用时才有效。
指定CDS_TEST允许一个应用确定哪个图形模式真正的有效。但并不会使系统变为那个有效的图形模式。
如果CDS_UPDATEREGISTRY被指定并且它可能会动态地改变图形模式。则注册表中保存该信息并且返回DISP_CHANGE_SUCCESSFUL如果不可能使用图形模式动态地改变,则注册表中保存该信息并且返回DISP_CHANGE_RESTART。
Windows NT:如果指定了CDS_UPDATEREGISTRY并且在注册表中不能保存该信息,则图形模式不会改变,并且返回DISP_CHANGE_NOTUPDATERD。
返回值:ChangeDisplaySettings函数的返回值如下:
DISP_CHANGE_SUCCESSFUL:设备改变成功。
DISP_CHANGE_RESTART:为使图形模式生效计算机必须重新启动。
DISP_CHANGE_BADFLAGS:标志的无效设置被传送。
DISP_CHANGE_NOTUPDATED:在WindowsNT中不能把设置写入注册表。
DISP_CHANGE_BADPARAM:一个无效的参数被传递。它可以包括一个无效的标志或标志的组合。
DISP_CHANGE_FAILED:指定图形模式的显示驱动失效。
DISP_CHANGE_BADMODE:不支持图形模式。

实现功能
1.新建基于对话框的应用程序
2.按照界面拖拽按钮控件<获取桌面可用分辨率> ,组合框,《设置选中分辨》

3.分别实现两按钮代码
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         CComboBox*pBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
  4.         CString sText;
  5.         //
  6.         DEVMODE DevMode;
  7.         ZeroMemory(&DevMode,sizeof(DEVMODE));
  8.         DevMode.dmSize = sizeof(DEVMODE);
  9.         int nIndex=0;
  10.         BOOL bResult = EnumDisplaySettings(NULL,nIndex,&DevMode);
  11.         while(bResult)
  12.         {
  13.                 bResult = EnumDisplaySettings(NULL,nIndex,&DevMode);
  14.                 nIndex++;
  15.                 sText.Format("%d*%d*%d",DevMode.dmPelsWidth,DevMode.dmPelsHeight,DevMode.dmBitsPerPel);
  16.                 pBox->InsertString(0,sText);
  17.                 pBox->SetCurSel(0);
  18.         }

  19. }
复制代码
  1. void CGkbc8Dlg::OnButton2()
  2. {
  3.         CComboBox*pBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
  4.         CString sText,sTemp;
  5.         pBox->GetLBText(pBox->GetCurSel(),sText);
  6.         sTemp=sText.Left(sText.Find('*'));
  7.         int nWidth = atoi(sTemp);
  8.         sText.Delete(0,sTemp.GetLength()+1);
  9.         sTemp=sText.Left(sText.Find('*'));
  10.         int Height = atoi(sTemp);
  11.         sText.Delete(0,sTemp.GetLength()+1);
  12.         int BitsPerPel = atoi(sText);
  13. //
  14.         DEVMODE DevMode;
  15.         DevMode.dmBitsPerPel = BitsPerPel;
  16.         DevMode.dmPelsWidth  = nWidth;
  17.         DevMode.dmPelsHeight = Height;
  18.         DevMode.dmSize = sizeof(DevMode);
  19.         DevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
  20.         LONG result = ChangeDisplaySettings(&DevMode,0);
  21.         if(result == DISP_CHANGE_SUCCESSFUL)
  22.                 ChangeDisplaySettings(&DevMode,CDS_UPDATEREGISTRY);
  23.                 //使用CDS_UPDATEREGISTRY表示次修改是持久的,并在注册表中写入了相关的数据
  24.         else
  25.         {
  26.                 AfxMessageBox("修改失败,恢复原有设置");
  27.                 ChangeDisplaySettings(NULL,0);
  28.         }
  29. }
复制代码
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机VC MFC动态桌面分辨率.rar 
文件大小:599.22 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  




回复

使用道具 举报

大神点评(1)

快速回复 返回列表 客服中心 搜索