📄 config.cpp
字号:
//
// 愝掕曐懚僋儔僗
//
#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 + -