⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.cpp

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//
// 愝掕曐懚僋儔僗
//
#include "VirtuaNESres.h"
#include "DebugOut.h"

#include "Config.h"
#include "Registry.h"

#include "DirectInput.h"
#include "extsoundfile.h"

// Global instance
CConfig	Config;

// Sampling rate table
INT	CConfig::SamplingRateTable[] = {
	11025,  8, 11025, 16, 22050,  8, 22050, 16,
	44100,  8, 44100, 16, 48000,  8, 48000, 16,
};

// Shortcut key IDs table
INT	CConfig::ShortcutKeyID[] = {
	// Main controls
	ID_OPEN,		IDS_CUT_OPEN,			0,
	ID_CLOSE,		IDS_CUT_CLOSE,			1,
	ID_LAUNCHER,		IDS_CUT_LAUNCHER,		2,

	ID_NETPLAY_CONNECT,	IDS_CUT_NETPLAY_CONNECT,	3,
	ID_NETPLAY_DISCONNECT,	IDS_CUT_NETPLAY_DISCONNECT,	4,
	ID_NETPLAY_CHAT,	IDS_CUT_NETPLAY_CHAT,		5,

	ID_ROMINFO,		IDS_CUT_ROMINFO,		8,
	ID_WAVERECORD,		IDS_CUT_WAVERECORD,		9,
	ID_EXIT,		IDS_CUT_EXIT,			15,

	// Emulation controls
	ID_HWRESET,		IDS_CUT_HWRESET,		16,
	ID_SWRESET,		IDS_CUT_SWRESET,		17,
	ID_PAUSE,		IDS_CUT_PAUSE,			18,
	ID_ONEFRAME,		IDS_CUT_ONEFRAME,		23,
	ID_THROTTLE,		IDS_CUT_THROTTLE,		19,
	ID_KEYTHROTTLE,		IDS_CUT_KEYTHROTTLE,		24,

	ID_FRAMESKIP_AUTO,	IDS_CUT_FRAMESKIP_AUTO,		20,
	ID_FRAMESKIP_UP,	IDS_CUT_FRAMESKIP_UP,		21,
	ID_FRAMESKIP_DOWN,	IDS_CUT_FRAMESKIP_DOWN,		22,

	// State controls
	ID_STATE_LOAD,		IDS_CUT_STATE_LOAD,		32,
	ID_STATE_SAVE,		IDS_CUT_STATE_SAVE,		33,
	ID_STATE_UP,		IDS_CUT_STATE_UP,		34,
	ID_STATE_DOWN,		IDS_CUT_STATE_DOWN,		35,
	ID_STATE_SLOT0,		IDS_CUT_STATE_SLOT0,		36,
	ID_STATE_SLOT1,		IDS_CUT_STATE_SLOT1,		37,
	ID_STATE_SLOT2,		IDS_CUT_STATE_SLOT2,		38,
	ID_STATE_SLOT3,		IDS_CUT_STATE_SLOT3,		39,
	ID_STATE_SLOT4,		IDS_CUT_STATE_SLOT4,		40,
	ID_STATE_SLOT5,		IDS_CUT_STATE_SLOT5,		41,
	ID_STATE_SLOT6,		IDS_CUT_STATE_SLOT6,		42,
	ID_STATE_SLOT7,		IDS_CUT_STATE_SLOT7,		43,
	ID_STATE_SLOT8,		IDS_CUT_STATE_SLOT8,		44,
	ID_STATE_SLOT9,		IDS_CUT_STATE_SLOT9,		45,

	// QuickLoad
	ID_QUICKLOAD_SLOT0,	IDS_CUT_QUICKLOAD_SLOT0,	256,
	ID_QUICKLOAD_SLOT1,	IDS_CUT_QUICKLOAD_SLOT1,	257,
	ID_QUICKLOAD_SLOT2,	IDS_CUT_QUICKLOAD_SLOT2,	258,
	ID_QUICKLOAD_SLOT3,	IDS_CUT_QUICKLOAD_SLOT3,	259,
	ID_QUICKLOAD_SLOT4,	IDS_CUT_QUICKLOAD_SLOT4,	260,
	ID_QUICKLOAD_SLOT5,	IDS_CUT_QUICKLOAD_SLOT5,	261,
	ID_QUICKLOAD_SLOT6,	IDS_CUT_QUICKLOAD_SLOT6,	262,
	ID_QUICKLOAD_SLOT7,	IDS_CUT_QUICKLOAD_SLOT7,	263,
	ID_QUICKLOAD_SLOT8,	IDS_CUT_QUICKLOAD_SLOT8,	264,
	ID_QUICKLOAD_SLOT9,	IDS_CUT_QUICKLOAD_SLOT9,	265,
	// QuickSave
	ID_QUICKSAVE_SLOT0,	IDS_CUT_QUICKSAVE_SLOT0,	266,
	ID_QUICKSAVE_SLOT1,	IDS_CUT_QUICKSAVE_SLOT1,	267,
	ID_QUICKSAVE_SLOT2,	IDS_CUT_QUICKSAVE_SLOT2,	268,
	ID_QUICKSAVE_SLOT3,	IDS_CUT_QUICKSAVE_SLOT3,	269,
	ID_QUICKSAVE_SLOT4,	IDS_CUT_QUICKSAVE_SLOT4,	270,
	ID_QUICKSAVE_SLOT5,	IDS_CUT_QUICKSAVE_SLOT5,	271,
	ID_QUICKSAVE_SLOT6,	IDS_CUT_QUICKSAVE_SLOT6,	272,
	ID_QUICKSAVE_SLOT7,	IDS_CUT_QUICKSAVE_SLOT7,	273,
	ID_QUICKSAVE_SLOT8,	IDS_CUT_QUICKSAVE_SLOT8,	274,
	ID_QUICKSAVE_SLOT9,	IDS_CUT_QUICKSAVE_SLOT9,	275,

	// Disk controls
	ID_DISK_EJECT,		IDS_CUT_DISK_EJECT,		48,
	ID_DISK_0A,		IDS_CUT_DISK_0A,		49,
	ID_DISK_0B,		IDS_CUT_DISK_0B,		50,
	ID_DISK_1A,		IDS_CUT_DISK_1A,		51,
	ID_DISK_1B,		IDS_CUT_DISK_1B,		52,

	// Movie controls
	ID_MOVIE_PLAY,		IDS_CUT_MOVIE_PLAY,		56,
	ID_MOVIE_REC,		IDS_CUT_MOVIE_REC,		57,
	ID_MOVIE_REC_APPEND,	IDS_CUT_MOVIE_REC_APPEND,	58,
	ID_MOVIE_STOP,		IDS_CUT_MOVIE_STOP,		59,
	ID_MOVIE_INFO,		IDS_CUT_MOVIE_INFO,		60,

	// Screen controls
	ID_ZOOMx1,		IDS_CUT_ZOOMx1,			64,
	ID_ZOOMx2,		IDS_CUT_ZOOMx2,			65,
	ID_ZOOMx3,		IDS_CUT_ZOOMx3,			66,
	ID_ZOOMx4,		IDS_CUT_ZOOMx4,			67,
	ID_FULLSCREEN,		IDS_CUT_FULLSCREEN,		68,

	// Sound controls
	ID_MUTE_0,		IDS_CUT_MUTE_MASTER,		72,
	ID_MUTE_1,		IDS_CUT_MUTE_RECTANGLE1,	73,
	ID_MUTE_2,		IDS_CUT_MUTE_RECTANGLE2,	74,
	ID_MUTE_3,		IDS_CUT_MUTE_TRIANGLE,		75,
	ID_MUTE_4,		IDS_CUT_MUTE_NOISE,		76,
	ID_MUTE_5,		IDS_CUT_MUTE_DPCM,		77,
	ID_MUTE_6,		IDS_CUT_MUTE_EXTERNAL1,		78,
	ID_MUTE_7,		IDS_CUT_MUTE_EXTERNAL2,		79,
	ID_MUTE_8,		IDS_CUT_MUTE_EXTERNAL3,		80,
	ID_MUTE_9,		IDS_CUT_MUTE_EXTERNAL4,		81,
	ID_MUTE_A,		IDS_CUT_MUTE_EXTERNAL5,		82,
	ID_MUTE_B,		IDS_CUT_MUTE_EXTERNAL6,		83,
	ID_MUTE_C,		IDS_CUT_MUTE_EXTERNAL7,		84,
	ID_MUTE_D,		IDS_CUT_MUTE_EXTERNAL8,		85,

	// Tape controls
	ID_TAPE_PLAY,		IDS_CUT_TAPE_PLAY,		90,
	ID_TAPE_REC,		IDS_CUT_TAPE_REC,		91,
	ID_TAPE_STOP,		IDS_CUT_TAPE_STOP,		92,

	// Other controls
	ID_SNAPSHOT,		IDS_CUT_SNAPSHOT,		96,
	ID_FPSDISP,		IDS_CUT_FPSDISP,		97,
	ID_TVASPECT,		IDS_CUT_TVASPECT,		98,
	ID_TVFRAME,		IDS_CUT_TVFRAME,		99,
	ID_SCANLINE,		IDS_CUT_SCANLINE,		100,
	ID_ALLLINE,		IDS_CUT_ALLLINE,		101,
	ID_ALLSPRITE,		IDS_CUT_ALLSPRITE,		102,
	ID_LEFTCLIP,		IDS_CUT_LEFTCLIP,		105,
	ID_SYNCDRAW,		IDS_CUT_SYNCDRAW,		103,
	ID_FITSCREEN,		IDS_CUT_FITSCREEN,		104,

	// Tool controls
	ID_SEARCH,		IDS_CUT_SEARCH,			110,
	ID_CHEAT,		IDS_CUT_CHEAT,			111,
	ID_CHEAT_ENABLE,	IDS_CUT_CHEAT_ENABLE,		112,
	ID_CHEAT_DISABLE,	IDS_CUT_CHEAT_DISABLE,		113,
	ID_GENIE,		IDS_CUT_GENIE,			114,

	ID_VIEW_PATTERN,	IDS_CUT_VIEW_PATTERN,		116,
	ID_VIEW_NAMETABLE,	IDS_CUT_VIEW_NAMETABLE,		117,
	ID_VIEW_PALETTE,	IDS_CUT_VIEW_PALETTE,		118,

	ID_VIEW_MEMORY,		IDS_CUT_VIEW_MEMORY,		119,

	0, 0, 0
};

void	CConfig::Load()
{
INT	i, j;
string	ret;
string	section;
CHAR	keys[64];
CHAR	szTemp[MAX_PATH];
WORD	szKeyTemp[64];

// General
	section = "General";

	general.bDoubleExecute = (BOOL)CRegistry::GetProfileInt( section.c_str(), "DoubleExecute", general.bDoubleExecute );
	general.bStartupLauncher = (BOOL)CRegistry::GetProfileInt( section.c_str(), "StartupLauncher", general.bStartupLauncher );

//	general.bWindowSave = CRegistry::GetProfileInt( section.c_str(), "WindowPosSave",   general.bWindowSave );
	general.bWindowZoom = CRegistry::GetProfileInt( section.c_str(), "WindowZoom",   general.bWindowZoom );

	RECT	rc;
	if( CRegistry::GetProfileBinary( section.c_str(), "WindowPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcWindowPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "SearchDialogPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcSearchDlgPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "PatternViewPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcPatternViewPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "NameTableViewPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcNameTableViewPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "PaletteViewPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcPaletteViewPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "MemoryViewPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcMemoryViewPos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "BarcodePos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcBarcodePos = rc;
	}
	if( CRegistry::GetProfileBinary( section.c_str(), "PaletteEditPos", (LPBYTE)&rc, sizeof(RECT) ) ) {
		general.rcPaletteEditPos = rc;
	}

	general.nScreenZoom = CRegistry::GetProfileInt( section.c_str(), "ScreenZoom", general.nScreenZoom );

	general.nJoyAxisDisable = CRegistry::GetProfileInt( section.c_str(), "JoyAxisDisable", general.nJoyAxisDisable );

	if( general.nJoyAxisDisable ) {
		// 埲慜偺愝掕傪堷偒宲偖堊
		WORD	bits = 0;
		switch( general.nJoyAxisDisable ) {
			case	1:
				bits = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5);
				break;
			case	2:
				bits = (1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5);
				break;
			case	3:
				bits = (1<<2)|(1<<3)|(1<<4)|(1<<5);
				break;
			case	4:
				bits = (1<<3)|(1<<4)|(1<<5);
				break;
			case	5:
				bits = (1<<4)|(1<<5);
				break;
			case	6:
				bits = (1<<5);
				break;
		}
		for( i = 0; i < 16; i++ ) {
			general.JoyAxisSetting[i] = bits;
		}

		general.nJoyAxisDisable = 0;
	} else {
		if( CRegistry::GetProfileBinary( section.c_str(), "JoyAxisSetting", szKeyTemp, 16*sizeof(WORD) ) ) {
			::memcpy( general.JoyAxisSetting, szKeyTemp, 16*sizeof(WORD) );
		}
	}
// Paths
	section = "Path";

	path.bRomPath      = (BOOL)CRegistry::GetProfileInt( section.c_str(), "RomPathUse",      path.bRomPath );
	path.bSavePath     = (BOOL)CRegistry::GetProfileInt( section.c_str(), "SavePathUse",     path.bSavePath );
	path.bStatePath    = (BOOL)CRegistry::GetProfileInt( section.c_str(), "StatePathUse",    path.bStatePath );
	path.bSnapshotPath = (BOOL)CRegistry::GetProfileInt( section.c_str(), "SnapshotPathUse", path.bSnapshotPath );
	path.bMoviePath    = (BOOL)CRegistry::GetProfileInt( section.c_str(), "MoviePathUse",    path.bMoviePath );
	path.bWavePath     = (BOOL)CRegistry::GetProfileInt( section.c_str(), "WavePathUse",     path.bWavePath );
	path.bCheatPath    = (BOOL)CRegistry::GetProfileInt( section.c_str(), "CheatPathUse",    path.bCheatPath );

	if( CRegistry::GetProfileString( section.c_str(), "RomPath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szRomPath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "SavePath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szSavePath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "StatePath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szStatePath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "SnapshotPath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szSnapshotPath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "MoviePath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szMoviePath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "WavePath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szWavePath, szTemp );
	if( CRegistry::GetProfileString( section.c_str(), "CheatPath", szTemp, sizeof(szTemp) ) )
		::strcpy( path.szCheatPath, szTemp );

// Emulator
	section = "Emulation";

	emulator.bIllegalOp     = (BOOL)CRegistry::GetProfileInt( section.c_str(), "IllegalOp",     emulator.bIllegalOp );

⌨️ 快捷键说明

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