您的位置:首页 > 编程语言

OpenGL 编程实践 之 改变屏幕分辨率和颜色深度

2010-10-10 20:27 429 查看
程序运行的结果是改变屏幕的分辨率和颜色深度。

一、程序的编写:

1. 新建和配置工程

新建一个工程,然后在Project->Setting->Link 中,加入OpenGL 相关几个lib文件

OpenGL32.lib Glu32.lib GLaux.lib


2. 加入头文件

#include <windows.h>
#include <GL/gl.h> //OpenGL 核心函数库文件的头文件
#include <GL/glu.h>//OpenGL 应用程序函数库的头文件
#include <gl/glaux.h>//OpenGL 辅助函数库的头文件
#include <stdio.h> //标准输入输出
#include <io.h> //输入输出


3. 改变分辨率函数的实现

bool ChangeResolution(int w,int h,int bitdepth)
{
DEVMODE devMode;
int modeSwitch;
int closeMode = 0;

EnumDisplaySettings(NULL,closeMode,&devMode); //获取指定显示设备的图形模式的信息

devMode.dmBitsPerPel = bitdepth;
devMode.dmPelsWidth = w;
devMode.dmPelsHeight = h;
devMode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

modeSwitch = ChangeDisplaySettings(&devMode,CDS_FULLSCREEN);

if(modeSwitch == DISP_CHANGE_SUCCESSFUL){
return true;
}
else{
ChangeDisplaySettings(NULL,0);
return FALSE;
}
}


4. 调用函数

在程序能执行到任意位置调用 上述函数即可

如:

ChangeResolution(640,480,16);


5. 运行程序

二、 程序说明

1. DEVMODE 结构体

The DEVMODE data structure contains information about the initialization and environment of a printer or a display device.


dmFields 指示DEVMODE结构体中的某个域有没有被初始化

这个结构体包含一个打印机或显示设备的初始化数据和环境信息。

2.EnumDisplaySettings函数

BOOL EnumDisplaySettings(
LPCTSTR lpszDeviceName,  // display device
DWORD iModeNum,          // graphics mode
LPDEVMODE lpDevMode      // graphics mode settings
);


这个函数是获取某一个显示设备的图形模式信息

如果第一个参数为空,则表示获取的是当前进程正在用的显示设备

第三个参数是out类型,它返回当前显示设备的信息

3.ChangeDisplaySetting函数

LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode,  // graphics mode
DWORD dwflags         // graphics mode options
);


把默认显示器的显示设置改成指定的图形模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: