CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何改变屏幕的分辩率?

楼主jszj(老板说mis部不是赚钱的部门...)2006-02-07 15:58:30 在 VC/MFC / 基础类 提问

 
  我只能得到屏幕的分辩率:  
  m_iSysWidth =   GetSystemMetrics(   SM_CXSCREEN   );  
  m_iSysHeight =   GetSystemMetrics(   SM_CYSCREEN   );  
   
  但是我想改变屏幕的分辩率,用哪个函数?  
  用SystemParametersInfo来改变分辩率没有效果啊 问题点数:60、回复次数:8Top

1 楼wangk(倒之)回复于 2006-02-07 16:02:10 得分 35

ChangeDisplaySettings函数Top

2 楼lzzqqq(Jonersen)回复于 2006-02-07 16:03:47 得分 2

同意,混分.Top

3 楼bobob(静思)回复于 2006-02-07 16:08:24 得分 13

#include   <AFX.H>  
  #include   <SHELLAPI.H>  
  #include   <STRING.H>  
   
  void   ChangeSystemMetrics(int   Width,   int   Height)  
  {  
  int       nFullWidth   =   GetSystemMetrics(SM_CXSCREEN);      
  int       nFullHeight   =   GetSystemMetrics(SM_CYSCREEN);      
  bool     bChanged   =   0;      
  if(nFullWidth   <   Width   ||   nFullHeight   <   Height)     //change         to     1024*768;      
  {      
  DEVMODE     lpDevMode;    
  memset(&lpDevMode,   0   ,sizeof(lpDevMode));  
  lpDevMode.dmBitsPerPel   =   16;//Change     from     24     to     16      
  lpDevMode.dmPelsWidth   =   Width;      
  lpDevMode.dmPelsHeight   =   Height;      
  lpDevMode.dmDisplayFrequency   =   85;      
  lpDevMode.dmSize   =   sizeof(DEVMODE);      
  lpDevMode.dmFields     =   DM_PELSWIDTH   |   DM_PELSHEIGHT   |   DM_BITSPERPEL   |   DM_DISPLAYFREQUENCY;      
  LONG     result;      
  result   =   ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);      
   
  if     (result   ==   DISP_CHANGE_SUCCESSFUL)      
  {      
  result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,CDS_UPDATEREGISTRY,NULL);      
  bChanged=1;      
  }      
  else      
  {      
  result=ChangeDisplaySettingsEx(NULL,&lpDevMode,NULL,0,NULL);      
  }    
   
  }      
  }  
   
  void   main()  
  {  
  ChangeSystemMetrics(1024,   768);  
  exit(0);  
  }  
  Top

4 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-02-07 16:47:38 得分 0

如何获得刷新率?Top

5 楼wangk(倒之)回复于 2006-02-07 16:51:23 得分 10

EnumDisplaySettings函数,用法见MSDN。Top

6 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-02-07 17:07:42 得分 0

刚才看了,知道   了,   谢谢!Top

7 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-02-07 17:15:34 得分 0

以下为本人最后的结果:  
  调整到想要的分辩率,如果不支持60MHZ以上的刷新率,则也不做调整,同时保存原来的分辩率和刷新率,在程序退出时还原  
  调整分辩率:  
  //   调整分辩率  
  m_iSysWidth =   GetSystemMetrics(   SM_CXSCREEN   );  
  m_iSysHeight =   GetSystemMetrics(   SM_CYSCREEN   );  
  if   (   m_iSysWidth   !=   SYSCR_WIDTH   ||   m_iSysHeight   !=   SYSCR_HEIGHT   )  
  {  
  DEVMODE   dm;  
  long lRet;  
   
  memset(   &dm,   0,   sizeof(DEVMODE)   );  
  dm.dmSize   =   sizeof(DEVMODE);  
  dm.dmFields   =   DM_PELSHEIGHT   |   DM_PELSWIDTH   |   DM_DISPLAYFREQUENCY;  
  EnumDisplaySettings(   NULL,   ENUM_CURRENT_SETTINGS,   &dm   );  
  m_iFrequency   =   dm.dmDisplayFrequency;  
   
  dm.dmPelsHeight   =   SYSCR_HEIGHT;  
  dm.dmPelsWidth     =   SYSCR_WIDTH;  
   
  lRet   =   ChangeDisplaySettings(   &dm,   CDS_TEST   );  
  if   (   lRet   !=   DISP_CHANGE_SUCCESSFUL   )  
  {  
  if   (   dm.dmDisplayFrequency   <=   60   )  
  AfxMessageBox(   IDS_DMINCORRECT,   MB_ICONSTOP   );  
  else  
  {  
  dm.dmDisplayFrequency   =   60;  
  lRet   =   ChangeDisplaySettings(   &dm,   CDS_TEST   );  
  if   (   lRet   !=   DISP_CHANGE_SUCCESSFUL   )  
  AfxMessageBox(   IDS_DMINCORRECT,   MB_ICONSTOP   );  
  else  
  {  
  lRet   =   ChangeDisplaySettings(   &dm,   CDS_UPDATEREGISTRY   );  
  if   (   lRet   !=   DISP_CHANGE_SUCCESSFUL   )  
  AfxMessageBox(   IDS_DMINCORRECT,   MB_ICONSTOP   );  
  else  
  m_bChangeDisplay   =   true;  
  }  
  }  
  }  
  else  
  {  
  lRet   =   ChangeDisplaySettings(   &dm,   CDS_UPDATEREGISTRY   );  
  if   (   lRet   !=   DISP_CHANGE_SUCCESSFUL   )  
  AfxMessageBox(   IDS_DMINCORRECT,   MB_ICONSTOP   );  
  else  
  m_bChangeDisplay   =   true;  
  }  
  }  
   
  在程序退出时,调整到原来的分辩率和刷新率:  
  if   (   m_bChangeDisplay   )  
  {  
  DEVMODE   dm;  
   
  memset(   &dm,   0,   sizeof(DEVMODE)   );  
  dm.dmSize   =   sizeof(DEVMODE);  
  dm.dmFields   =   DM_PELSHEIGHT   |   DM_PELSWIDTH   |   DM_DISPLAYFREQUENCY;  
  dm.dmPelsHeight   =   m_iSysHeight;  
  dm.dmPelsWidth     =   m_iSysWidth;  
  dm.dmDisplayFrequency   =   m_iFrequency;  
   
  ChangeDisplaySettings(   &dm,   CDS_UPDATEREGISTRY   );  
  }  
  Top

8 楼jszj(老板说mis部不是赚钱的部门...)回复于 2006-02-07 17:17:30 得分 0

非常感谢以上朋友的帮助!Top

相关问题

  • 怎样用API函数改变屏幕的分辩率?(VC)
  • 在线等待,怎么改变屏幕分辩率??
  • 什么API函数可以改变屏幕分辩率?thanks
  • 关于屏幕分辩率?
  • 如何编程实现改变显示器的分辩率?
  • 如何编写适应不同分辩率屏幕的窗口程序
  • 请问asp如何得到客户端的屏幕分辩率? 谢谢! 另外...
  • 如何取得当前屏幕的分辩率,并将当前窗体置于屏幕顶端?
  • 怎样知道屏幕的分辩率?
  • 如何更改分辩率?

关键词

  • 屏幕
  • 函数
  • getsystemmetrics
  • 改变
  • nfullwidth
  • cxscreen
  • cyscreen
  • sm
  • 屏幕的分辩率
  • include

得分解答快速导航

  • 帖主:jszj
  • wangk
  • lzzqqq
  • bobob
  • wangk

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo