display.cpp

来自「visual c++ 专业游戏程序设计的初级代码」· C++ 代码 · 共 80 行

CPP
80
字号
// Display.cpp : ChangeDisplaySetting 包装类
//
//		Copyright (c) 2000 Chihiro.SAKAMOTO (HyperWorks)
//

#include "stdafx.h"
#include "Game.h"
#include "Display.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

///////////////////////////////////////////////////////////////
// CDisplay

// 构造函数
//
CDisplay::CDisplay()
	:changed(false)
{
	StoreDisplayMode();
}

// 析构函数
//
CDisplay::~CDisplay()
{
	RestoreDisplayMode();
}

// 存储现在的显示模式
//
void CDisplay::StoreDisplayMode()
{
	HDC	dc = GetDC(0);
	devmode_org.dmSize = sizeof(devmode_org);
	devmode_org.dmDriverExtra = 0;
	devmode_org.dmPelsWidth = GetDeviceCaps(dc, HORZRES);
	devmode_org.dmPelsHeight = GetDeviceCaps(dc, VERTRES);
	devmode_org.dmBitsPerPel = GetDeviceCaps(dc, BITSPIXEL);
	devmode_org.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
	if ((GetVersion() & 0x80000000) == 0) {		// Windows NT/2000
		devmode_org.dmFields |= DM_DISPLAYFREQUENCY;
		devmode_org.dmDisplayFrequency = GetDeviceCaps(dc, VREFRESH);
	}
	ReleaseDC(0, dc);
}

// 还原成之前存储的显示模式
//
void CDisplay::RestoreDisplayMode()
{
	if (changed) {
		ChangeDisplaySettings(&devmode_org, 0);
		changed = false;
	}
}

// 更改显示模式
//
bool CDisplay::ChangeDisplayMode(int width, int height)
{
	DEVMODE	devmode;

	devmode = devmode_org;
	devmode.dmPelsWidth = width;
	devmode.dmPelsHeight = height;
	devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;

	if (ChangeDisplaySettings(&devmode, CDS_FULLSCREEN)
	== DISP_CHANGE_SUCCESSFUL) {
		changed = true;
		return true;
	}
	return false;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?