用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。

时间: 2024-10-31 17:25:26

用VC实现动态改变Windows的显示特性的相关文章

JS使用oumousemove和oumouseout动态改变图片显示的方法_javascript技巧

本文实例讲述了JS使用oumousemove和oumouseout动态改变图片显示的方法.分享给大家供大家参考.具体如下: 鼠标放到图片上时图片会自动变大,鼠标离开图片还原 <!DOCTYPE html> <html> <head> <script> function bigImg(x) { x.style.height="64px"; x.style.width="64px"; } function normalIm

JS使用oumousemove和oumouseout动态改变图片显示的方法

 本文实例讲述了JS使用oumousemove和oumouseout动态改变图片显示的方法.分享给大家供大家参考.具体如下: 鼠标放到图片上时图片会自动变大,鼠标离开图片还原 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!DOCTYPE html> <html> <head> <script> function bigImg(x) { x.style.height=&q

窗口过程-windows程序设计 为什么窗口一开始空白,需要最小化或者改变大小才显示

问题描述 windows程序设计 为什么窗口一开始空白,需要最小化或者改变大小才显示 /*-----------------------------------------SINEWAVE.C -- Sine Wave Using Polyline(c) Charles Petzold 1998-----------------------------------------*/ #include #include #define NUM 1000#define TWOPI (2 * 3.141

Android的listview怎样动态改变显示的数量

问题描述 Android的listview怎样动态改变显示的数量 我做了一个简单的小程序,在一个界面上有一个按钮,然后点击按钮就增加一行listview,但是我 我的程序点击却没有反应,应该怎样解决,这是源代码 package com.example.dianjishiyan; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context

jQuery动态改变图片显示大小(修改版)的实现思路及代码_jquery

当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸.通过搜索,我们可以从网上找到实现此功能的jQuery代码如下.这段代码可以使图片的大小保持在一定范围内,如果图片的原始尺寸都大于max*值,则显示出来的图片宽度都相等. 原始代码: 复制代码 代码如下: $(document).ready(function() {     $('.post img').each(function() {     var maxWidth = 100; /

javascript动态改变img的src属性图片不显示的解决方法_图象特效

首先讲下这个bug的出现的情况,页面中有 复制代码 代码如下: <a href="javascript:void(0)" onclick="document.getElementById('current').src='images/001.jpg';"> 这么一个a标签,onclick中的JS代码就是改变id为current的img标签的src属性,以达到动态切换图片的效果.可是不幸的是:IE是动态改变的图片的路径,但是图片却不显示出来,得右键&quo

使用Hyper-V时Windows任务管理器显示错误的CPU速度

最近我和我的好朋友Damian 都买了台Lenovo X1 Carbon Touch.它采用了Intel SpeedStep 技术, 所以会根据负载动态改变CPU速率.我们俩的笔记本是一样的.然而,这是Damian的http://www.aliyun.com/zixun/aggregation/11435.html">任务管理器在基本空闲的状态下显示的数据. 而我的则是这样的: 这到底是怎么回事?他的CPU最大速率为2GHz,当前速率是0.60GHz,这表示他的CPU几乎是休眠状态.我的显

C# 设计时动态改变实体在PropertyGrid中显示出来的属性

方法一: /// <summary> /// 实体属性处理 /// </summary> public class PropertyHandle { #region 反射控制只读.可见属性 //SetPropertyVisibility(obj, "名称 ", true); //obj指的就是你的SelectObject, "名称"是你SelectObject的一个属性 //当然,调用这两个方法后,重新SelectObject一下,就可以了.

JavaScript动态改变网页图片大小

在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了.如果对每个插图都先进行缩放再插入的话,太麻烦了. 我前段时间写的一篇文章就遇到过这种事情,后来用CSS的overflow和max-width属性暂时解决了页面变形的问题.这种方法好处是简单,但坏处是会破坏某些细节的效果. 如overflow:hidden,意思是当内部元素宽度大于父框架时隐藏超出宽度的部分.这样做可能会是一些内容突然截断,被隐藏了,很对不起观众. 通过max-width属性限制文章插图最大宽度的话,需