标题: [原创]利用LabWindows/CVI修改显示器的设置 [打印本页]
作者: wangjianxin2001 时间: 2006-11-20 17:36 标题: [原创]利用LabWindows/CVI修改显示器的设置
其实,大家每天用电脑都免不了看显示器,而显示的设置又很大程序上会影响我们眼睛的接受能力! 坐在那就不舒服了,如果眼睛难受,看电脑企不是受罪?
我今天用LabWindows/CVI写了一个程序,有关显示器设置方面的,请大家共勉!
主要包括象素位数、分辨率、刷新频率的设置!
界面如下:
代码为:
/* 改变屏幕设置函数的定义
LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode, 显示模式
DWORD dwflags 显示模式选项
);
*/
/* dwflags的主要属性为:
0 动态改变显示设置属性
CDS_UPDATEREGISTRY 动态改变显示设置,并在下次起动机器时,所做的修改依然有效
CDS_TEST 测试所做的修改是否有效
*/
/* 返回值的主要属性为:
DISP_CHANGE_SUCCESSFUL 修改成功
DISP_CHANGE_RESTART 修改后需要重启
DISP_CHANGE_BADFLAGS 修改标志错误
DISP_CHANGE_BADPARAM 修改参数错误
DISP_CHANGE_FAILED 修改失败
DISP_CHANGE_BADMODE 修改模式错误
DISP_CHANGE_NOTUPDATED 只对于Windows NT/2000有效,不能写入注册表
*/
#include "windows.h"
#include
#include
#include "屏幕分辨率设置.h"
static int panelHandle;
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
if (InitCVIRTE (hInstance, 0, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "屏幕分辨率设置.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//修改按钮
int CVICALLBACK OkCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int Frequency;
int HWPixel;
int BitsPerPixel;
long result;
//声明该函数变量
DEVMODE lpDevMode;
/* lpDevMode的主要属性为:
dmBitsPerPel 象素位数
dmPelsWidth 水平分辨率
dmPelsHeight 垂直分辨率
dmDisplayFlags 设备修改方式
dmDisplayFrequency 刷新频率
dmPosition 多显示器显示内容位置设置,只对Windows 98, Windows 2000有效
*/
switch (event)
{
case EVENT_COMMIT:
//获得象素位数
GetCtrlVal (panelHandle, PANEL_RING_BIT, &BitsPerPixel);
//获得水平分辨率
GetCtrlVal (panelHandle, PANEL_RING_RES, &HWPixel);
//获得垂直分辨率
GetCtrlVal (panelHandle, PANEL_RING_FRE, &Frequency);
//设置象素位数
lpDevMode.dmBitsPerPel = BitsPerPixel;
//设备刷新频率
lpDevMode.dmDisplayFrequency = Frequency;
if (HWPixel == 0)
{
//分辨率为1024*768
lpDevMode.dmPelsWidth = 1024;
lpDevMode.dmPelsHeight = 768;
}
else
{
//分辨率为800*600
lpDevMode.dmPelsWidth = 800;
lpDevMode.dmPelsHeight = 600;
}
//获得数据结构的大小
lpDevMode.dmSize = sizeof(lpDevMode);
//设置要修改的字段
lpDevMode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL|DM_DISPLAYFREQUENCY;
/* dmFields的主要属性为:
DM_BITSPERPEL 设置象素有效
DM_PELSWIDTH 设置水平分辨率有效
DM_PELSHEIGHT 设置垂直分辨率有效
DM_DISPLAYFLAGS 设置显示设备的修改方式有效
DM_DISPLAYFREQUENCY 设置刷新频率有效
DM_POSITION 设置多显示器有效
*/
//设置屏幕分辨率并获得返回值
result = ChangeDisplaySettings(&lpDevMode, 0);
if (result == DISP_CHANGE_SUCCESSFUL)
{
ChangeDisplaySettings(&lpDevMode, CDS_UPDATEREGISTRY);
}
else
{
MessagePopup ("提示", "屏幕分辨率修改失败!");
}
break;
}
return 0;
}
//退出按钮
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
Mc2r5oeY.rar (383.11 KB)
附件: [[原创]利用LabWindows/CVI修改显示器的设置] Mc2r5oeY.rar (2006-11-20 17:36, 383.11 KB) / 下载次数 263
http://bbs.eccn.com/attachment.php?aid=281&k=f50361f7568710fe909569468e7646be&t=1732339636&sid=5226W4
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |