首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[原创]利用LabWindows/CVI修改显示器的设置

[原创]利用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;
}
 
转自:小信的博客
网址:http://blog.sina.com.cn/u/1265070197
Mc2r5oeY.rar (383.11 KB)
返回列表