进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 程序开发 -> VC -> 文章内容  
用VC实现动态改变Windows的显示特性

对于Windows平台,显示器的分辩率、颜色数、刷新率等特性很重要,尤其是对于多媒体应用软件和游戏软件。在很多情况下,用户当前的屏幕设置并不适合软件的运行需要,软件通常的做法是提示用户将屏幕设置到软件要求的分辩率及颜色数,再重新启动软件。这样无疑会增加普通用户操作上的负担和困难,降低了软件的友好性和易用性。理想的作法是:在软件开始时,动态的改变屏幕设置来达到软件运行的要求。在软件运行结束后,再自动把屏幕设置改回原来的设置值。这一切过程都在不知不觉中完成。本例演示了动态设置系统显示分辩率,只要系统的硬件的支持,你可以将分辨率设置为1024*768或800*600;色彩设置为8位、24位、32位等。程序编译运行后的界面效果如图一所示:


图一、设置系统分辨率的程序界面效果图

  一、编程方法

  我们知道,显示器所显示的内容对应于显存,在显示器上最小的单位是象素(Pixel,这里仅考虑逻辑象素),显存的最小的单位是位(Bits)。显示器工作的特征主要体现在色彩数和分辨率两方面。显示器所显示的色彩的数目取决于单位象素所使用的显存的位数(Bits)。在显存中,如果8位显存(即一个向象素使用了一字节的显存)对应于显示器上的一个象素,那么显示器所显示的色彩数目为28=256色;同样,如果当前的色彩为16位,那么显示器所显示的色彩数目为216=65536种色彩。显示器的分辨率指的是水平分辨率和垂直分辨率,经常所说的800X600,就是指在水平方面上所显示的象素为 800个,在垂直方面上所显示的象素为600个。

  在VC中提供了修改显示设备(如显示器、打印机等等,本文只就显示器而言)属性的函数ChangeDisplaySettings(),该函数能够按照你的需要对显示设备作出相应的修改。其函数的原型为:LONG ChangeDisplaySettings(LPDEVMODE lpDevMode, DWORD dwflags),其参数的含义如下:

  lpDevMode:一个指向DEVMODE数据结构的指针,DEVMODE的数据结构描述了欲设定显示器的各类属性值。通常情况下使用到的成员变量有:
   dmSize:所用DEVMODE数据结构的大小(以Bytes为单位);
   dmBitsPerPel :每象素所使用的显存位数(Bits);
   dmPelsWidth :水平分辨率(点数);
   dmPelsHeight Pixel height :垂直分辨率(点数);
   dmDisplayFrequency :显示刷新率,以赫兹为单位;
   dmFields:通常情况下,不同的显示设备(如打印机)用到的DEVMODE数据结构的内容不同,比如设定打印机时,你不会用到 dmDisplayFrequency属性。所以,在你使用DEVMODE数据结构时,应向系统说明你具体用到的有效数据成员,dmFields的用处便在于此。如果在程序中只用到dmPelsWidth(水平分辨率)和dmPelsHeight(垂直分辨率),那么该值应为 DM_PELSWIDTH|DM_PELSHEIGHT。
   Dwflags:表明对显示设备的修改方式。具体取值有以下几种:0 :动态改变显示设备属性;CDS_UPDATEREGISTRY:动态改变显示设备属性并修改注册表相关设置,下次启动计算机时,本次所做的修改依然有效;CDS_TEST:测试所做的修改是否有效。

  上述函数调用后返回值如下:DISP_CHANGE_SUCCESSFUL:修改成功;DISP_CHANGE_RESTART :修改后需重新启动(在显示器设定中选择了"应用新的颜色前重新启动计算机"); DISP_CHANGE_FAILED :修改失败;DISP_CHANGE_BADMODE:修改模式错误(比如你的显示器是单色的,但你却将之修改为256色的)。如果在函数调用时,参数 lpDevMode为NULL且dwflags 为0, 则显示设备使用注册表当前值来设置显示特性。以上是ChangeDisplaySettings()函数的最常见的用法,更详细的说明请参见MSDN。

  对于系统的显示特性编程,还有一个关键的API函数EnumDisplaySettings()用来获得当前显示驱动所支持的所有显示模式。获得当前显示模式可以使用下面的函数:

Bool GetCurrentVideoSettings(DEVMODE *devmode)
{
 HWND hwndDesktop=GetDesktopWindow();
 HDC hdc=GetDC(hwndDesktop);
 devmode -> dmSize =sizeof(DEVMODE);
 devmode -> dmBitsPerPel=GetDeviceCaps(hdc,BITSPIXEL);
 devmode -> dmPelsWidth=GetSystemMetrics(SM_CXSCREEN);
 devmode -> dmPelsHeight=GetSystemMetrics(SM_CYSCREEN);
 devmode -> dmFields=DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
 return TRUE;
}

  下面的代码展示了如何使用EnumDisplaySettings获得当前支持的所有显示模式:

int modenum,done;
DEVMODE devmode;
done=0;
modenum=0;
do
{
 done=!EnumDisplaySettings(NULL,modenum,&devmode);
 AddToList(&devmode);
 modenum++;
}while (!done);


  设置显示模式的方法如下:

  rc = ChangeDisplaySettings(&devmode,CDS_FULLSCREEN));这里的devmode就是前面使用 EnumDisplaySettings获得的。如果设置正常,返回值DISP_CHANGE_SUCCESSFUL。www.goodsgy.com

[1] [2]  下一页

在百度中搜索:用VC实现动态改变Windows的显示特性
在Google中搜索:用VC实现动态改变Windows的显示特性
在Yahoo中搜索:用VC实现动态改变Windows的显示特性

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· PowerPoint不用VBA也制作交互课件
· [图文] PowerPoint中用VBA制作课堂小测验
· 在Excel中利用VBA创建多级选单
· 普通用户Excel使用VBA的几个误区
· Excel中调用VBA选择目标文件夹
· 在Excel中用VBA实现定时提醒功能
· 如何启用/禁用Vista内置管理员帐号
· [图文] PowerPoint做交互课件 不用VBA
· 给Vista初学者的建议 如何正确用Vista
· 用VB.NET 2005编写定时关机程序
 
· VC实现系统热键激活后台服务程序
· SEO:关于baidu一些排名规则的讨论
· More Effective C++:不要重载的操作符
· VC利用boost库解析正则表达式
· [图文] 用VC实现对超长数据库字段的操作
· More Effective C++:防止资源泄漏
· 用VC#2005解析含有多种格式的文本文件
· C++中禁止异常信息传递到析构函数外
· [图文] Visual C# 2005实现控件中捕获按键..
· C++中理解“传递参数”和异常之间的差异

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)