visualboyadvance-m/src/win32/MainWnd.cpp

1308 lines
51 KiB
C++

// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
// Copyright (C) 1999-2003 Forgotten
// Copyright (C) 2005-2006 Forgotten and the VBA development team
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or(at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// MainWnd.cpp : implementation file
//
#include "stdafx.h"
#include "VBA.h"
#include "MainWnd.h"
#include <winsock.h>
#include <shlwapi.h>
#include "FileDlg.h"
#include "Reg.h"
#include "WinResUtil.h"
#include "Logging.h"
#include "../System.h"
#include "../AutoBuild.h"
#include "../cheatSearch.h"
#include "../agb/GBA.h"
#include "../Globals.h"
#include "../Flash.h"
#include "../Globals.h"
#include "../dmg/GB.h"
#include "../dmg/gbCheats.h"
#include "../dmg/gbGlobals.h"
#include "../RTC.h"
#include "../Sound.h"
#include "../Util.h"
#include "../agb/GBALink.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern void remoteCleanUp();
extern int gbHardware;
/////////////////////////////////////////////////////////////////////////////
// MainWnd
MainWnd::MainWnd()
{
m_hAccelTable = NULL;
arrow = LoadCursor(NULL, IDC_ARROW);
}
MainWnd::~MainWnd()
{
}
BEGIN_MESSAGE_MAP(MainWnd, CWnd)
//{{AFX_MSG_MAP(MainWnd)
ON_WM_CLOSE()
ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
ON_COMMAND(ID_HELP_FAQ, OnHelpFaq)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_WM_INITMENUPOPUP()
ON_COMMAND(ID_FILE_PAUSE, OnFilePause)
ON_UPDATE_COMMAND_UI(ID_FILE_PAUSE, OnUpdateFilePause)
ON_COMMAND(ID_FILE_RESET, OnFileReset)
ON_UPDATE_COMMAND_UI(ID_FILE_RESET, OnUpdateFileReset)
ON_UPDATE_COMMAND_UI(ID_FILE_RECENT_FREEZE, OnUpdateFileRecentFreeze)
ON_COMMAND(ID_FILE_RECENT_RESET, OnFileRecentReset)
ON_COMMAND(ID_FILE_RECENT_FREEZE, OnFileRecentFreeze)
ON_COMMAND(ID_FILE_EXIT, OnFileExit)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
ON_COMMAND(ID_FILE_OPENGAMEBOY, OnFileOpengameboy)
ON_COMMAND(ID_FILE_LOAD, OnFileLoad)
ON_UPDATE_COMMAND_UI(ID_FILE_LOAD, OnUpdateFileLoad)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
ON_COMMAND(ID_FILE_IMPORT_BATTERYFILE, OnFileImportBatteryfile)
ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_BATTERYFILE, OnUpdateFileImportBatteryfile)
ON_COMMAND(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnFileImportGamesharkcodefile)
ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnUpdateFileImportGamesharkcodefile)
ON_COMMAND(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnFileImportGamesharksnapshot)
ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnUpdateFileImportGamesharksnapshot)
ON_COMMAND(ID_FILE_EXPORT_BATTERYFILE, OnFileExportBatteryfile)
ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_BATTERYFILE, OnUpdateFileExportBatteryfile)
ON_COMMAND(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnFileExportGamesharksnapshot)
ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnUpdateFileExportGamesharksnapshot)
ON_COMMAND(ID_FILE_SCREENCAPTURE, OnFileScreencapture)
ON_UPDATE_COMMAND_UI(ID_FILE_SCREENCAPTURE, OnUpdateFileScreencapture)
ON_COMMAND(ID_FILE_ROMINFORMATION, OnFileRominformation)
ON_UPDATE_COMMAND_UI(ID_FILE_ROMINFORMATION, OnUpdateFileRominformation)
ON_COMMAND(ID_FILE_TOGGLEMENU, OnFileTogglemenu)
ON_UPDATE_COMMAND_UI(ID_FILE_TOGGLEMENU, OnUpdateFileTogglemenu)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_NOTHROTTLE, OnUpdateOptionsFrameskipThrottleNothrottle)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnUpdateOptionsFrameskipThrottle25)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnUpdateOptionsFrameskipThrottle50)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnUpdateOptionsFrameskipThrottle100)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnUpdateOptionsFrameskipThrottle150)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnUpdateOptionsFrameskipThrottle200)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnUpdateOptionsFrameskipThrottleOther)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_NOTHROTTLE, OnOptionsFrameskipThrottleNothrottle)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnOptionsFrameskipThrottle25)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnOptionsFrameskipThrottle50)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnOptionsFrameskipThrottle100)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnOptionsFrameskipThrottle150)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnOptionsFrameskipThrottle200)
ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnOptionsFrameskipThrottleOther)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_0, OnUpdateOptionsVideoFrameskip0)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_1, OnUpdateOptionsVideoFrameskip1)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_2, OnUpdateOptionsVideoFrameskip2)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_3, OnUpdateOptionsVideoFrameskip3)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_4, OnUpdateOptionsVideoFrameskip4)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_5, OnUpdateOptionsVideoFrameskip5)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_6, OnUpdateOptionsVideoFrameskip6)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_7, OnUpdateOptionsVideoFrameskip7)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_8, OnUpdateOptionsVideoFrameskip8)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_9, OnUpdateOptionsVideoFrameskip9)
ON_COMMAND(ID_OPTIONS_VIDEO_VSYNC, OnOptionsVideoVsync)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_VSYNC, OnUpdateOptionsVideoVsync)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X1, OnUpdateOptionsVideoX1)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X2, OnUpdateOptionsVideoX2)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X3, OnUpdateOptionsVideoX3)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X4, OnUpdateOptionsVideoX4)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnUpdateOptionsVideoFullscreen320x240)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnUpdateOptionsVideoFullscreen640x480)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnUpdateOptionsVideoFullscreen800x600)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnOptionsVideoFullscreen320x240)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnOptionsVideoFullscreen640x480)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnOptionsVideoFullscreen800x600)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN, OnOptionsVideoFullscreen)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN, OnUpdateOptionsVideoFullscreen)
ON_WM_MOVING()
ON_WM_MOVE()
ON_WM_SIZING()
ON_WM_SIZE()
ON_COMMAND(ID_OPTIONS_VIDEO_DISABLESFX, OnOptionsVideoDisablesfx)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DISABLESFX, OnUpdateOptionsVideoDisablesfx)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnOptionsVideoFullscreenstretchtofit)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnUpdateOptionsVideoFullscreenstretchtofit)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnOptionsVideoRendermethodDirect3d)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnUpdateOptionsVideoRendermethodDirect3d)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnOptionsVideoRendermethodOpengl)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnUpdateOptionsVideoRendermethodOpengl)
ON_COMMAND(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnOptionsVideoTriplebuffering)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnUpdateOptionsVideoTriplebuffering)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnOptionsVideoRenderoptionsD3dnofilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnUpdateOptionsVideoRenderoptionsD3dnofilter)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnOptionsVideoRenderoptionsD3dbilinear)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnUpdateOptionsVideoRenderoptionsD3dbilinear)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnOptionsVideoRenderoptionsGlnearest)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnUpdateOptionsVideoRenderoptionsGlnearest)
ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnOptionsVideoRenderoptionsGlbilinear)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnUpdateOptionsVideoRenderoptionsGlbilinear)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_OPTIONS_EMULATOR_ASSOCIATE, OnOptionsEmulatorAssociate)
ON_COMMAND(ID_OPTIONS_EMULATOR_DIRECTORIES, OnOptionsEmulatorDirectories)
ON_COMMAND(ID_OPTIONS_EMULATOR_DISABLESTATUSMESSAGES, OnOptionsEmulatorDisablestatusmessages)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_DISABLESTATUSMESSAGES, OnUpdateOptionsEmulatorDisablestatusmessages)
ON_COMMAND(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnOptionsEmulatorSynchronize)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnUpdateOptionsEmulatorSynchronize)
ON_COMMAND(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnOptionsEmulatorPausewheninactive)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnUpdateOptionsEmulatorPausewheninactive)
ON_COMMAND(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnOptionsEmulatorSpeeduptoggle)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnUpdateOptionsEmulatorSpeeduptoggle)
ON_COMMAND(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnOptionsEmulatorAutomaticallyipspatch)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnUpdateOptionsEmulatorAutomaticallyipspatch)
ON_COMMAND(ID_OPTIONS_EMULATOR_AGBPRINT, OnOptionsEmulatorAgbprint)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AGBPRINT, OnUpdateOptionsEmulatorAgbprint)
ON_COMMAND(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnOptionsEmulatorRealtimeclock)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnUpdateOptionsEmulatorRealtimeclock)
ON_COMMAND(ID_OPTIONS_EMULATOR_GENERICFLASHCARD, OnOptionsEmulatorGenericflashcard)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_GENERICFLASHCARD, OnUpdateOptionsEmulatorGenericflashcard)
ON_COMMAND(ID_OPTIONS_EMULATOR_REWINDINTERVAL, OnOptionsEmulatorRewindinterval)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnOptionsEmulatorSavetypeAutomatic)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnUpdateOptionsEmulatorSavetypeAutomatic)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnOptionsEmulatorSavetypeEeprom)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnUpdateOptionsEmulatorSavetypeEeprom)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnOptionsEmulatorSavetypeSram)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnUpdateOptionsEmulatorSavetypeSram)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnOptionsEmulatorSavetypeFlash)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnUpdateOptionsEmulatorSavetypeFlash)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnOptionsEmulatorSavetypeEepromsensor)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnUpdateOptionsEmulatorSavetypeEepromsensor)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnOptionsEmulatorSavetypeNone)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnUpdateOptionsEmulatorSavetypeNone)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnOptionsEmulatorSavetypeFlash512k)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnUpdateOptionsEmulatorSavetypeFlash512k)
ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnOptionsEmulatorSavetypeFlash1m)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnUpdateOptionsEmulatorSavetypeFlash1m)
ON_COMMAND(ID_OPTIONS_EMULATOR_PNGFORMAT, OnOptionsEmulatorPngformat)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PNGFORMAT, OnUpdateOptionsEmulatorPngformat)
ON_COMMAND(ID_OPTIONS_EMULATOR_BMPFORMAT, OnOptionsEmulatorBmpformat)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_BMPFORMAT, OnUpdateOptionsEmulatorBmpformat)
ON_COMMAND(ID_OPTIONS_SOUND_OFF, OnOptionsSoundOff)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_OFF, OnUpdateOptionsSoundOff)
ON_COMMAND(ID_OPTIONS_SOUND_MUTE, OnOptionsSoundMute)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTE, OnUpdateOptionsSoundMute)
ON_COMMAND(ID_OPTIONS_SOUND_ON, OnOptionsSoundOn)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ON, OnUpdateOptionsSoundOn)
ON_COMMAND(ID_OPTIONS_SOUND_ECHO, OnOptionsSoundEcho)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ECHO, OnUpdateOptionsSoundEcho)
ON_COMMAND(ID_OPTIONS_SOUND_LOWPASSFILTER, OnOptionsSoundLowpassfilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_LOWPASSFILTER, OnUpdateOptionsSoundLowpassfilter)
ON_COMMAND(ID_OPTIONS_SOUND_REVERSESTEREO, OnOptionsSoundReversestereo)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_REVERSESTEREO, OnUpdateOptionsSoundReversestereo)
ON_COMMAND(ID_OPTIONS_SOUND_11KHZ, OnOptionsSound11khz)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_11KHZ, OnUpdateOptionsSound11khz)
ON_COMMAND(ID_OPTIONS_SOUND_22KHZ, OnOptionsSound22khz)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_22KHZ, OnUpdateOptionsSound22khz)
ON_COMMAND(ID_OPTIONS_SOUND_44KHZ, OnOptionsSound44khz)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_44KHZ, OnUpdateOptionsSound44khz)
ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL1, OnOptionsSoundChannel1)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL1, OnUpdateOptionsSoundChannel1)
ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL2, OnOptionsSoundChannel2)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL2, OnUpdateOptionsSoundChannel2)
ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL3, OnOptionsSoundChannel3)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL3, OnUpdateOptionsSoundChannel3)
ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL4, OnOptionsSoundChannel4)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL4, OnUpdateOptionsSoundChannel4)
ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnOptionsSoundDirectsounda)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnUpdateOptionsSoundDirectsounda)
ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnOptionsSoundDirectsoundb)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnUpdateOptionsSoundDirectsoundb)
ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDER, OnOptionsGameboyBorder)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDER, OnUpdateOptionsGameboyBorder)
ON_COMMAND(ID_OPTIONS_GAMEBOY_PRINTER, OnOptionsGameboyPrinter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_PRINTER, OnUpdateOptionsGameboyPrinter)
ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnOptionsGameboyBorderAutomatic)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnUpdateOptionsGameboyBorderAutomatic)
ON_COMMAND(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnOptionsGameboyAutomatic)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnUpdateOptionsGameboyAutomatic)
ON_COMMAND(ID_OPTIONS_GAMEBOY_GBA, OnOptionsGameboyGba)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GBA, OnUpdateOptionsGameboyGba)
ON_COMMAND(ID_OPTIONS_GAMEBOY_CGB, OnOptionsGameboyCgb)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_CGB, OnUpdateOptionsGameboyCgb)
ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB, OnOptionsGameboySgb)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB, OnUpdateOptionsGameboySgb)
ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB2, OnOptionsGameboySgb2)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB2, OnUpdateOptionsGameboySgb2)
ON_COMMAND(ID_OPTIONS_GAMEBOY_GB, OnOptionsGameboyGb)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GB, OnUpdateOptionsGameboyGb)
ON_COMMAND(ID_OPTIONS_GAMEBOY_REALCOLORS, OnOptionsGameboyRealcolors)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_REALCOLORS, OnUpdateOptionsGameboyRealcolors)
ON_COMMAND(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnOptionsGameboyGameboycolors)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnUpdateOptionsGameboyGameboycolors)
ON_COMMAND(ID_OPTIONS_GAMEBOY_COLORS, OnOptionsGameboyColors)
ON_COMMAND(ID_OPTIONS_FILTER_DISABLEMMX, OnOptionsFilterDisablemmx)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_DISABLEMMX, OnUpdateOptionsFilterDisablemmx)
ON_COMMAND(ID_OPTIONS_LANGUAGE_SYSTEM, OnOptionsLanguageSystem)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_SYSTEM, OnUpdateOptionsLanguageSystem)
ON_COMMAND(ID_OPTIONS_LANGUAGE_ENGLISH, OnOptionsLanguageEnglish)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_ENGLISH, OnUpdateOptionsLanguageEnglish)
ON_COMMAND(ID_OPTIONS_LANGUAGE_OTHER, OnOptionsLanguageOther)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_OTHER, OnUpdateOptionsLanguageOther)
ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnOptionsJoypadConfigure1)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnUpdateOptionsJoypadConfigure1)
ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnOptionsJoypadConfigure2)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnUpdateOptionsJoypadConfigure2)
ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnOptionsJoypadConfigure3)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnUpdateOptionsJoypadConfigure3)
ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnOptionsJoypadConfigure4)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnUpdateOptionsJoypadConfigure4)
ON_COMMAND(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnOptionsJoypadMotionconfigure)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnUpdateOptionsJoypadMotionconfigure)
ON_COMMAND(ID_CHEATS_SEARCHFORCHEATS, OnCheatsSearchforcheats)
ON_UPDATE_COMMAND_UI(ID_CHEATS_SEARCHFORCHEATS, OnUpdateCheatsSearchforcheats)
ON_COMMAND(ID_CHEATS_CHEATLIST, OnCheatsCheatlist)
ON_UPDATE_COMMAND_UI(ID_CHEATS_CHEATLIST, OnUpdateCheatsCheatlist)
ON_COMMAND(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnCheatsAutomaticsaveloadcheats)
ON_COMMAND(ID_CHEATS_LOADCHEATLIST, OnCheatsLoadcheatlist)
ON_UPDATE_COMMAND_UI(ID_CHEATS_LOADCHEATLIST, OnUpdateCheatsLoadcheatlist)
ON_COMMAND(ID_CHEATS_SAVECHEATLIST, OnCheatsSavecheatlist)
ON_UPDATE_COMMAND_UI(ID_CHEATS_SAVECHEATLIST, OnUpdateCheatsSavecheatlist)
ON_COMMAND(ID_TOOLS_DISASSEMBLE, OnToolsDisassemble)
ON_UPDATE_COMMAND_UI(ID_TOOLS_DISASSEMBLE, OnUpdateToolsDisassemble)
ON_COMMAND(ID_TOOLS_LOGGING, OnToolsLogging)
ON_UPDATE_COMMAND_UI(ID_TOOLS_LOGGING, OnUpdateToolsLogging)
ON_COMMAND(ID_TOOLS_IOVIEWER, OnToolsIoviewer)
ON_UPDATE_COMMAND_UI(ID_TOOLS_IOVIEWER, OnUpdateToolsIoviewer)
ON_COMMAND(ID_TOOLS_MAPVIEW, OnToolsMapview)
ON_UPDATE_COMMAND_UI(ID_TOOLS_MAPVIEW, OnUpdateToolsMapview)
ON_COMMAND(ID_TOOLS_MEMORYVIEWER, OnToolsMemoryviewer)
ON_UPDATE_COMMAND_UI(ID_TOOLS_MEMORYVIEWER, OnUpdateToolsMemoryviewer)
ON_COMMAND(ID_TOOLS_OAMVIEWER, OnToolsOamviewer)
ON_UPDATE_COMMAND_UI(ID_TOOLS_OAMVIEWER, OnUpdateToolsOamviewer)
ON_COMMAND(ID_TOOLS_PALETTEVIEW, OnToolsPaletteview)
ON_UPDATE_COMMAND_UI(ID_TOOLS_PALETTEVIEW, OnUpdateToolsPaletteview)
ON_COMMAND(ID_TOOLS_TILEVIEWER, OnToolsTileviewer)
ON_UPDATE_COMMAND_UI(ID_TOOLS_TILEVIEWER, OnUpdateToolsTileviewer)
ON_COMMAND(ID_DEBUG_NEXTFRAME, OnDebugNextframe)
ON_UPDATE_COMMAND_UI(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnUpdateCheatsAutomaticsaveloadcheats)
ON_COMMAND(ID_TOOLS_DEBUG_GDB, OnToolsDebugGdb)
ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_GDB, OnUpdateToolsDebugGdb)
ON_COMMAND(ID_TOOLS_DEBUG_LOADANDWAIT, OnToolsDebugLoadandwait)
ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_LOADANDWAIT, OnUpdateToolsDebugLoadandwait)
ON_COMMAND(ID_TOOLS_DEBUG_BREAK, OnToolsDebugBreak)
ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_BREAK, OnUpdateToolsDebugBreak)
ON_COMMAND(ID_TOOLS_DEBUG_DISCONNECT, OnToolsDebugDisconnect)
ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_DISCONNECT, OnUpdateToolsDebugDisconnect)
ON_COMMAND(ID_OPTIONS_SOUND_STARTRECORDING, OnOptionsSoundStartrecording)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_STARTRECORDING, OnUpdateOptionsSoundStartrecording)
ON_COMMAND(ID_OPTIONS_SOUND_STOPRECORDING, OnOptionsSoundStoprecording)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_STOPRECORDING, OnUpdateOptionsSoundStoprecording)
ON_COMMAND(ID_TOOLS_RECORD_STARTAVIRECORDING, OnToolsRecordStartavirecording)
ON_UPDATE_COMMAND_UI(ID_TOOLS_RECORD_STARTAVIRECORDING, OnUpdateToolsRecordStartavirecording)
ON_COMMAND(ID_TOOLS_RECORD_STOPAVIRECORDING, OnToolsRecordStopavirecording)
ON_UPDATE_COMMAND_UI(ID_TOOLS_RECORD_STOPAVIRECORDING, OnUpdateToolsRecordStopavirecording)
ON_WM_PAINT()
ON_COMMAND(ID_TOOLS_RECORD_STARTMOVIERECORDING, OnToolsRecordStartmovierecording)
ON_UPDATE_COMMAND_UI(ID_TOOLS_RECORD_STARTMOVIERECORDING, OnUpdateToolsRecordStartmovierecording)
ON_COMMAND(ID_TOOLS_RECORD_STOPMOVIERECORDING, OnToolsRecordStopmovierecording)
ON_UPDATE_COMMAND_UI(ID_TOOLS_RECORD_STOPMOVIERECORDING, OnUpdateToolsRecordStopmovierecording)
ON_COMMAND(ID_TOOLS_PLAY_STARTMOVIEPLAYING, OnToolsPlayStartmovieplaying)
ON_UPDATE_COMMAND_UI(ID_TOOLS_PLAY_STARTMOVIEPLAYING, OnUpdateToolsPlayStartmovieplaying)
ON_COMMAND(ID_TOOLS_PLAY_STOPMOVIEPLAYING, OnToolsPlayStopmovieplaying)
ON_UPDATE_COMMAND_UI(ID_TOOLS_PLAY_STOPMOVIEPLAYING, OnUpdateToolsPlayStopmovieplaying)
ON_COMMAND(ID_TOOLS_REWIND, OnToolsRewind)
ON_UPDATE_COMMAND_UI(ID_TOOLS_REWIND, OnUpdateToolsRewind)
ON_COMMAND(ID_TOOLS_CUSTOMIZE, OnToolsCustomize)
ON_UPDATE_COMMAND_UI(ID_TOOLS_CUSTOMIZE, OnUpdateToolsCustomize)
ON_COMMAND(ID_HELP_BUGREPORT, OnHelpBugreport)
ON_WM_MOUSEMOVE()
ON_WM_INITMENU()
ON_WM_ACTIVATE()
ON_WM_DROPFILES()
ON_COMMAND(ID_FILE_SAVEGAME_OLDESTSLOT, OnFileSavegameOldestslot)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_OLDESTSLOT, OnUpdateFileSavegameOldestslot)
ON_COMMAND(ID_FILE_LOADGAME_MOSTRECENT, OnFileLoadgameMostrecent)
ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MOSTRECENT, OnUpdateFileLoadgameMostrecent)
ON_COMMAND(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnFileLoadgameAutoloadmostrecent)
ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnUpdateFileLoadgameAutoloadmostrecent)
ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_25X, OnOptionsSoundVolume25x)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_25X, OnUpdateOptionsSoundVolume25x)
ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_5X, OnOptionsSoundVolume5x)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_5X, OnUpdateOptionsSoundVolume5x)
ON_COMMAND(ID_CHEATS_DISABLECHEATS, OnCheatsDisablecheats)
ON_UPDATE_COMMAND_UI(ID_CHEATS_DISABLECHEATS, OnUpdateCheatsDisablecheats)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENMAXSCALE, OnOptionsVideoFullscreenmaxscale)
ON_COMMAND(ID_OPTIONS_EMULATOR_GAMEOVERRIDES, OnOptionsEmulatorGameoverrides)
ON_COMMAND(ID_OPTIONS_SELECT_PLUGIN, OnOptionsSelectPlugin)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_GAMEOVERRIDES, OnUpdateOptionsEmulatorGameoverrides)
ON_COMMAND(ID_HELP_GNUPUBLICLICENSE, OnHelpGnupubliclicense)
ON_COMMAND(ID_OPTIONS_LINK_OPTIONS, OnLinkOptions)
ON_COMMAND(ID_OPTIONS_LINK_LOG, OnOptionsLinkLog)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LINK_LOG, OnUpdateOptionsLinkLog)
ON_COMMAND(ID_OPTIONS_LINK_WIRELESSADAPTER, OnOptionsLinkRFU)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LINK_WIRELESSADAPTER, OnUpdateOptionsLinkRFU)
ON_COMMAND(ID_OPTIONS_LINK_ENABLE, OnOptionsLinkEnable)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_LINK_ENABLE, OnUpdateOptionsLinkEnable)
//}}AFX_MSG_MAP
ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE10, OnFileRecentFile)
ON_COMMAND_EX_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnFileLoadSlot)
ON_COMMAND_EX_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnFileSaveSlot)
ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnUpdateFileLoadGameSlot)
ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnUpdateFileSaveGameSlot)
ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_FRAMESKIP_0, ID_OPTIONS_VIDEO_FRAMESKIP_5, OnOptionsFrameskip)
ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_FRAMESKIP_6, ID_OPTIONS_VIDEO_FRAMESKIP_9, OnOptionsFrameskip)
ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_X1, ID_OPTIONS_VIDEO_X4, OnOptionVideoSize)
ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnVideoLayer)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnUpdateVideoLayer)
ON_COMMAND(ID_SYSTEM_MINIMIZE, OnSystemMinimize)
ON_COMMAND_EX_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, OnOptionsEmulatorShowSpeed)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, OnUpdateOptionsEmulatorShowSpeed)
ON_COMMAND_EX_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnOptionsSoundVolume)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnUpdateOptionsSoundVolume)
ON_COMMAND_EX_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnOptionsPriority)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnUpdateOptionsPriority)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_HQ2X, ID_OPTIONS_FILTER_LQ2X, OnOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_PLUGIN, ID_OPTIONS_FILTER_PLUGIN, OnOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_PLUGIN, ID_OPTIONS_FILTER_PLUGIN, OnUpdateOptionsFilter)
ON_COMMAND_EX(ID_OPTIONS_FILTER_HQ3X, OnOptionsFilter)
ON_COMMAND_EX(ID_OPTIONS_FILTER_HQ4X, OnOptionsFilter)
ON_COMMAND_EX(ID_OPTIONS_FILTER_SIMPLE3X, OnOptionsFilter)
ON_COMMAND_EX(ID_OPTIONS_FILTER_SIMPLE4X, OnOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_HQ2X, ID_OPTIONS_FILTER_LQ2X, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_SIMPLE3X, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_SIMPLE4X, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_HQ3X, OnUpdateOptionsFilter)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_HQ4X, OnUpdateOptionsFilter)
ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, OnOptionsFilterIFB)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, OnUpdateOptionsFilterIFB)
ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnOptionsJoypadDefault)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnUpdateOptionsJoypadDefault)
ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_R, OnOptionsJoypadAutofire)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_R, OnUpdateOptionsJoypadAutofire)
ON_MESSAGE(WM_SYSCOMMAND, OnMySysCommand)
ON_COMMAND(ID_OPTIONS_SOUND_HARDWAREACCELERATION, &MainWnd::OnOptionsSoundHardwareacceleration)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_HARDWAREACCELERATION, &MainWnd::OnUpdateOptionsSoundHardwareacceleration)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN1280X1024, OnOptionsVideoFullscreen1280x1024)
ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN1024X768, OnOptionsVideoFullscreen1024x768)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN1024X768, OnUpdateOptionsVideoFullscreen1024x768)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN1280X1024, OnUpdateOptionsVideoFullscreen1280x1024)
ON_COMMAND(ID_OPTIONS_FILTER_LCDCOLORS, OnOptionsFilterLcdcolors)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_LCDCOLORS, OnUpdateOptionsFilterLcdcolors)
ON_COMMAND_EX_RANGE(ID_OPTIONS_SOUND_PCMINTERPOLATION_NONE, ID_OPTIONS_SOUND_PCMINTERPOLATION_LIBRESAMPLE, OnOptionsSoundPcminterpolation)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_SOUND_PCMINTERPOLATION_NONE, ID_OPTIONS_SOUND_PCMINTERPOLATION_LIBRESAMPLE, OnUpdateOptionsSoundPcminterpolation)
ON_COMMAND(ID_OUTPUTAPI_DIRECTSOUND, &MainWnd::OnOutputapiDirectsound)
ON_UPDATE_COMMAND_UI(ID_OUTPUTAPI_DIRECTSOUND, &MainWnd::OnUpdateOutputapiDirectsound)
ON_COMMAND(ID_OUTPUTAPI_OPENAL, &MainWnd::OnOutputapiOpenal)
ON_UPDATE_COMMAND_UI(ID_OUTPUTAPI_OPENAL, &MainWnd::OnUpdateOutputapiOpenal)
ON_COMMAND(ID_OUTPUTAPI_OALCONFIGURATION, &MainWnd::OnOutputapiOalconfiguration)
ON_UPDATE_COMMAND_UI(ID_OUTPUTAPI_OALCONFIGURATION, &MainWnd::OnUpdateOutputapiOalconfiguration)
ON_COMMAND(ID_RENDERAPI_D3DMOTIONBLUR, &MainWnd::OnRenderapiD3dmotionblur)
ON_UPDATE_COMMAND_UI(ID_RENDERAPI_D3DMOTIONBLUR, &MainWnd::OnUpdateRenderapiD3dmotionblur)
ON_WM_NCLBUTTONDOWN()
ON_WM_WINDOWPOSCHANGING()
ON_COMMAND(ID_EMULATOR_BIOSFILES, &MainWnd::OnEmulatorBiosfiles)
ON_COMMAND(ID_FILE_OPEN_GBC, &MainWnd::OnFileOpenGbc)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// MainWnd message handlers
void MainWnd::OnClose()
{
emulating = false;
CWnd::OnClose();
delete this;
}
bool MainWnd::FileRun()
{
// save battery file before we change the filename...
if(rom != NULL || gbRom != NULL) {
if(theApp.autoSaveLoadCheatList)
winSaveCheatListDefault();
writeBatteryFile();
cheatSearchCleanup(&cheatSearchData);
theApp.emulator.emuCleanUp();
remoteCleanUp();
emulating = false;
#ifdef APU_LOGGER_H
end_apu_log();
#endif
}
char tempName[2048];
char file[2048];
CString oldFile = theApp.filename;
utilStripDoubleExtension(theApp.szFile, tempName);
_fullpath(file, tempName, 2048);
theApp.filename = file;
int index = theApp.filename.ReverseFind('.');
if(index != -1)
theApp.filename = theApp.filename.Left(index);
if( theApp.filename != oldFile ) {
// clear cheat list when another game is loaded
cheatsDeleteAll( false );
gbCheatRemoveAll();
}
CString ipsname;
ipsname.Format("%s.ips", theApp.filename);
if(!theApp.dir.GetLength()) {
int index = theApp.filename.ReverseFind('\\');
if(index != -1) {
theApp.dir = theApp.filename.Left(index-1);
}
}
IMAGE_TYPE type = utilFindType(theApp.szFile);
if(type == IMAGE_UNKNOWN) {
systemMessage(IDS_UNSUPPORTED_FILE_TYPE,
"Unsupported file type: %s", theApp.szFile);
return false;
}
systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED;
theApp.cartridgeType = type;
if(type == IMAGE_GB) {
genericflashcardEnable = theApp.winGenericflashcardEnable;
if(!gbLoadRom(theApp.szFile))
return false;
gbGetHardwareType();
// used for the handling of the gb Boot Rom
if (gbHardware & 5)
{
skipBios = theApp.skipBiosFile;
gbCPUInit(theApp.biosFileNameGB, theApp.useBiosFileGB);
}
gbReset();
theApp.emulator = GBSystem;
gbBorderOn = theApp.winGbBorderOn;
theApp.romSize = gbRomSize;
if(theApp.autoIPS) {
int size = gbRomSize;
utilApplyIPS(ipsname, &gbRom, &size);
if(size != gbRomSize) {
extern bool gbUpdateSizes();
gbUpdateSizes();
gbReset();
theApp.romSize = size;
}
}
} else {
int size = CPULoadRom(theApp.szFile);
if(!size)
return false;
theApp.romSize = size;
flashSetSize(theApp.winFlashSize);
rtcEnable(theApp.winRtcEnable);
cpuSaveType = theApp.winSaveType;
GetModuleFileName(NULL, tempName, 2048);
char *p = strrchr(tempName, '\\');
if(p)
*p = 0;
char buffer[5];
strncpy(buffer, (const char *)&rom[0xac], 4);
buffer[4] = 0;
strcat(tempName, "\\vba-over.ini");
UINT i = GetPrivateProfileInt(buffer,
"rtcEnabled",
-1,
tempName);
if(i != (UINT)-1)
rtcEnable(i == 0 ? false : true);
i = GetPrivateProfileInt(buffer,
"flashSize",
-1,
tempName);
if(i != (UINT)-1 && (i == 0x10000 || i == 0x20000))
flashSetSize((int)i);
i = GetPrivateProfileInt(buffer,
"saveType",
-1,
tempName);
if(i != (UINT)-1 && (i <= 5))
cpuSaveType = (int)i;
i = GetPrivateProfileInt(buffer,
"mirroringEnabled",
-1,
tempName);
if(i != (UINT)-1)
doMirroring (i == 0 ? false : true);
theApp.emulator = GBASystem;
/* disabled due to problems
if(theApp.removeIntros && rom != NULL) {
*((u32 *)rom)= 0xea00002e;
}
*/
if(theApp.autoIPS) {
int size = 0x2000000;
utilApplyIPS(ipsname, &rom, &size);
if(size != 0x2000000) {
CPUReset();
}
}
}
if(theApp.soundInitialized) {
if(theApp.cartridgeType == 1)
gbSoundReset();
else
soundReset();
} else {
if(!soundOffFlag)
soundInit();
theApp.soundInitialized = true;
}
#ifdef APU_LOGGER_H
begin_apu_log("apu_log.txt");
#endif
if(type == IMAGE_GBA) {
skipBios = theApp.skipBiosFile;
CPUInit(theApp.biosFileNameGBA.GetString(), theApp.useBiosFileGBA);
CPUReset();
}
readBatteryFile();
if(theApp.autoSaveLoadCheatList)
winLoadCheatListDefault();
theApp.addRecentFile(theApp.szFile);
theApp.updateWindowSize(theApp.videoOption);
theApp.updateFrameSkip();
emulating = true;
if(theApp.autoLoadMostRecent)
OnFileLoadgameMostrecent();
theApp.frameskipadjust = 0;
theApp.renderedFrames = 0;
theApp.autoFrameSkipLastTime = systemGetClock();
theApp.rewindCount = 0;
theApp.rewindCounter = 0;
theApp.rewindSaveNeeded = false;
toolsClearLog();
return true;
}
void MainWnd::OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu)
{
ASSERT(pMenu != NULL);
CCmdUI state;
state.m_pMenu = pMenu;
ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pParentMenu == NULL);
// determine if menu is popup in top-level menu and set m_pOther to
// it if so (m_pParentMenu == NULL indicates that it is secondary popup)
HMENU hParentMenu;
if (AfxGetThreadState()->m_hTrackingMenu == pMenu->m_hMenu)
state.m_pParentMenu = pMenu; // parent == child for tracking popup
else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) {
CWnd* pParent = GetTopLevelParent();
// child windows don't have menus -- need to go to the top!
if (pParent != NULL &&
(hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) {
int nIndexMax = ::GetMenuItemCount(hParentMenu);
for (int nIndex = 0; nIndex < nIndexMax; nIndex++) {
if (::GetSubMenu(hParentMenu, nIndex) == pMenu->m_hMenu) {
// when popup is found, m_pParentMenu is containing menu
state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
break;
}
}
}
}
state.m_nIndexMax = pMenu->GetMenuItemCount();
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
state.m_nIndex++) {
state.m_nID = pMenu->GetMenuItemID(state.m_nIndex);
if (state.m_nID == 0)
continue; // menu separator or invalid cmd - ignore it
ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pMenu != NULL);
if (state.m_nID == (UINT)-1) {
// possibly a popup menu, route to first item of that popup
state.m_pSubMenu = pMenu->GetSubMenu(state.m_nIndex);
if (state.m_pSubMenu == NULL ||
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
state.m_nID == (UINT)-1) {
continue; // first item of popup can't be routed to
}
state.DoUpdate(this, FALSE); // popups are never auto disabled
} else {
// normal menu item
// Auto enable/disable if frame window has 'm_bAutoMenuEnable'
// set and command is _not_ a system command.
state.m_pSubMenu = NULL;
state.DoUpdate(this, state.m_nID < 0xF000);
}
// adjust for menu deletions and additions
UINT nCount = pMenu->GetMenuItemCount();
if (nCount < state.m_nIndexMax) {
state.m_nIndex -= (state.m_nIndexMax - nCount);
while (state.m_nIndex < nCount &&
pMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) {
state.m_nIndex++;
}
}
state.m_nIndexMax = nCount;
}
}
void MainWnd::OnMoving(UINT fwSide, LPRECT pRect)
{
CWnd::OnMoving(fwSide, pRect);
if( emulating ) {
soundPause();
}
}
void MainWnd::OnMove(int x, int y)
{
CWnd::OnMove(x, y);
if(!theApp.changingVideoSize) {
if(this) {
if(!IsIconic()) {
RECT r;
GetWindowRect(&r);
theApp.windowPositionX = r.left;
theApp.windowPositionY = r.top;
theApp.adjustDestRect();
regSetDwordValue("windowX", theApp.windowPositionX);
regSetDwordValue("windowY", theApp.windowPositionY);
}
}
}
}
void MainWnd::OnSizing(UINT fwSide, LPRECT pRect)
{ // the OnSizing event only occurs in windowed mode
CWnd::OnSizing(fwSide, pRect);
// pause sound to prevent low sound buffers
if( emulating ) {
soundPause();
}
// maintain minimal window size
RECT size = { 0, 0, theApp.sizeX, theApp.sizeY };
AdjustWindowRectEx(
&size,
WS_POPUP | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
FALSE,
0 );
MENUBARINFO mbi;
mbi.cbSize = sizeof(MENUBARINFO);
this->GetMenuBarInfo( OBJID_MENU, 0, &mbi );
const LONG menuHeight = mbi.rcBar.bottom - mbi.rcBar.top + 1;
// +1 because of that white line, wherever it comes from
const LONG width = size.right - size.left;
const LONG height = size.bottom - size.top + menuHeight;
if( ( pRect->right - pRect->left ) < width ) {
pRect->right = pRect->left + width;
}
if( ( pRect->bottom - pRect->top ) < height ) {
pRect->bottom = pRect->top + height;
}
}
void MainWnd::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
bool redraw = ( ( cx < theApp.surfaceSizeX ) || ( cy < theApp.surfaceSizeY ) );
if(!theApp.changingVideoSize) {
if(this) {
if(!IsIconic()) {
if(theApp.iconic) {
if(emulating) {
soundResume();
theApp.paused = false;
}
}
if(theApp.videoOption <= VIDEO_4X) {
theApp.surfaceSizeX = cx;
theApp.surfaceSizeY = cy;
theApp.adjustDestRect();
if(theApp.display)
theApp.display->resize(theApp.dest.right-theApp.dest.left, theApp.dest.bottom-theApp.dest.top);
if( redraw && emulating ) {
theApp.painting = true;
systemDrawScreen();
theApp.painting = false;
theApp.renderedFrames--;
}
}
} else {
if(emulating) {
if(!theApp.paused) {
theApp.paused = true;
soundPause();
}
}
theApp.iconic = true;
}
}
}
}
void MainWnd::winSaveCheatListDefault()
{
CString name;
CString filename;
int index = theApp.filename.ReverseFind('\\');
if(index != -1)
name = theApp.filename.Right(theApp.filename.GetLength()-index-1);
else
name = theApp.filename;
CString dir = regQueryStringValue("saveDir", NULL);
if( dir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, dir );
dir = baseDir;
}
if(!dir.GetLength())
dir = getDirFromFile(filename);
if(isDriveRoot(dir))
filename.Format("%s%s.clt", dir, name);
else
filename.Format("%s\\%s.clt", dir, name);
winSaveCheatList(filename);
}
void MainWnd::winSaveCheatList(const char *name)
{
if(theApp.cartridgeType == 0)
cheatsSaveCheatList(name);
else
gbCheatsSaveCheatList(name);
}
void MainWnd::winLoadCheatListDefault()
{
CString name;
CString filename;
int index = theApp.filename.ReverseFind('\\');
if(index != -1)
name = theApp.filename.Right(theApp.filename.GetLength()-index-1);
else
name = theApp.filename;
CString dir = regQueryStringValue("saveDir", NULL);
if( dir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, dir );
dir = baseDir;
}
if(!dir.GetLength())
dir = getDirFromFile(filename);
if(isDriveRoot(dir))
filename.Format("%s%s.clt", dir, name);
else
filename.Format("%s\\%s.clt", dir, name);
winLoadCheatList(filename);
}
void MainWnd::winLoadCheatList(const char *name)
{
bool res = false;
if(theApp.cartridgeType == 0)
res = cheatsLoadCheatList(name);
else
res = gbCheatsLoadCheatList(name);
if(res)
systemScreenMessage(winResLoadString(IDS_LOADED_CHEATS));
}
CString MainWnd::getDirFromFile(CString& file)
{
CString temp = file;
int index = temp.ReverseFind('\\');
if(index != -1) {
temp = temp.Left(index);
if(temp.GetLength() == 2 && temp[1] == ':')
temp += "\\";
} else {
temp = "";
}
return temp;
}
bool MainWnd::isDriveRoot(CString& file)
{
if(file.GetLength() == 3) {
if(file[1] == ':' && file[2] == '\\')
return true;
}
return false;
}
void MainWnd::writeBatteryFile()
{
CString buffer;
CString filename;
int index = theApp.filename.ReverseFind('\\');
if(index != -1)
buffer = theApp.filename.Right(theApp.filename.GetLength()-index-1);
else
buffer = theApp.filename;
CString saveDir = regQueryStringValue("batteryDir", NULL);
if( saveDir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, saveDir );
saveDir = baseDir;
}
if(saveDir.IsEmpty())
saveDir = getDirFromFile(theApp.filename);
if(isDriveRoot(saveDir))
filename.Format("%s%s.sav", saveDir, buffer);
else
filename.Format("%s\\%s.sav", saveDir, buffer);
if(theApp.emulator.emuWriteBattery)
theApp.emulator.emuWriteBattery(MakeInstanceFilename((const char *)filename));
}
void MainWnd::readBatteryFile()
{
CString buffer;
CString filename;
int index = theApp.filename.ReverseFind('\\');
if(index != -1)
buffer = theApp.filename.Right(theApp.filename.GetLength()-index-1);
else
buffer = theApp.filename;
CString saveDir = regQueryStringValue("batteryDir", NULL);
if( saveDir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, saveDir );
saveDir = baseDir;
}
if(saveDir.IsEmpty())
saveDir = getDirFromFile(theApp.filename);
if(isDriveRoot(saveDir))
filename.Format("%s%s.sav", saveDir, buffer);
else
filename.Format("%s\\%s.sav", saveDir, buffer);
bool res = false;
if(theApp.emulator.emuReadBattery)
res = theApp.emulator.emuReadBattery(MakeInstanceFilename(filename));
if(res)
systemScreenMessage(winResLoadString(IDS_LOADED_BATTERY));
}
CString MainWnd::winLoadFilter(UINT id)
{
CString res = winResLoadString(id);
res.Replace('_','|');
return res;
}
bool MainWnd::loadSaveGame(const char *name)
{
if(theApp.emulator.emuReadState)
return theApp.emulator.emuReadState(name);
return false;
}
bool MainWnd::writeSaveGame(const char *name)
{
if(theApp.emulator.emuWriteState)
return theApp.emulator.emuWriteState(name);
return false;
}
void MainWnd::OnContextMenu(CWnd* pWnd, CPoint point)
{
winMouseOn();
}
void MainWnd::OnSystemMinimize()
{
ShowWindow(SW_SHOWMINIMIZED);
}
bool MainWnd::fileOpenSelect( int system )
{
theApp.dir = _T("");
CString initialDir;
int selectedFilter = 0;
LPCTSTR exts[] = { _T(""), _T(""), _T(""), _T("") };
CString filter;
CString title;
switch( system )
{
case 0:
// GBA
initialDir = regQueryStringValue( _T("romdir"), _T(".") );
selectedFilter = regQueryDwordValue( _T("selectedFilter"), 0);
if( (selectedFilter < 0) || (selectedFilter > 2) ) {
selectedFilter = 0;
}
filter = winLoadFilter( IDS_FILTER_ROM );
break;
case 1:
// GBC
initialDir = regQueryStringValue( _T("gbcromdir"), _T(".") );
// TODO: memorize selected filter for GBC as well
filter = winLoadFilter( IDS_FILTER_GBCROM );
break;
case 2:
// GB
initialDir = regQueryStringValue( _T("gbromdir"), _T(".") );
// TODO: memorize selected filter for GB as well
filter = winLoadFilter( IDS_FILTER_GBROM );
break;
}
title = winResLoadString( IDS_SELECT_ROM );
if( !initialDir.IsEmpty() ) {
theApp.dir = initialDir;
}
if( initialDir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, initialDir );
initialDir = baseDir;
}
theApp.szFile = _T("");
FileDlg dlg( this, _T(""), filter, selectedFilter, _T(""), exts, theApp.dir, title, false);
if( dlg.DoModal() == IDOK ) {
if( system == 0 ) {
regSetDwordValue( _T("selectedFilter"), dlg.m_ofn.nFilterIndex );
}
theApp.szFile = dlg.GetPathName();
theApp.dir = theApp.szFile.Left( dlg.m_ofn.nFileOffset );
if( (theApp.dir.GetLength() > 3) && (theApp.dir[theApp.dir.GetLength()-1] == _T('\\')) ) {
theApp.dir = theApp.dir.Left( theApp.dir.GetLength() - 1 );
}
SetCurrentDirectory( theApp.dir );
return true;
}
return false;
}
void MainWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(emulating) {
theApp.painting = true;
systemDrawScreen();
theApp.painting = false;
theApp.renderedFrames--;
}
}
BOOL MainWnd::PreTranslateMessage(MSG* pMsg)
{
if (CWnd::PreTranslateMessage(pMsg))
return TRUE;
if(pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) {
return theApp.hAccel != NULL && ::TranslateAccelerator(m_hWnd, theApp.hAccel, pMsg);
}
return FALSE;
}
void MainWnd::screenCapture(int captureNumber)
{
CString buffer;
CString captureDir = regQueryStringValue("captureDir", "");
if( captureDir[0] == '.' ) {
// handle as relative path
char baseDir[MAX_PATH+1];
GetModuleFileName( NULL, baseDir, MAX_PATH );
baseDir[MAX_PATH] = '\0'; // for security reasons
PathRemoveFileSpec( baseDir ); // removes the trailing file name and backslash
strcat( baseDir, "\\" );
strcat( baseDir, captureDir );
captureDir = baseDir;
}
int index = theApp.filename.ReverseFind('\\');
CString name;
if(index != -1)
name = theApp.filename.Right(theApp.filename.GetLength()-index-1);
else
name = theApp.filename;
if(captureDir.IsEmpty())
captureDir = getDirFromFile(theApp.filename);
LPCTSTR ext = "png";
if(theApp.captureFormat != 0)
ext = "bmp";
if(isDriveRoot(captureDir))
buffer.Format("%s%s_%02d.%s",
captureDir,
name,
captureNumber,
ext);
else
buffer.Format("%s\\%s_%02d.%s",
captureDir,
name,
captureNumber,
ext);
// check if file exists
DWORD dwAttr = GetFileAttributes( buffer );
if( dwAttr != INVALID_FILE_ATTRIBUTES ) {
// screenshot file already exists
screenCapture(++captureNumber);
// this will recursively use the first non-existent screenshot number
return;
}
if(theApp.captureFormat == 0)
theApp.emulator.emuWritePNG(buffer);
else
theApp.emulator.emuWriteBMP(buffer);
CString msg = winResLoadString(IDS_SCREEN_CAPTURE);
systemScreenMessage(msg);
}
void MainWnd::winMouseOn()
{
SetCursor(arrow);
if(theApp.videoOption > VIDEO_4X) {
theApp.mouseCounter = 10;
} else
theApp.mouseCounter = 0;
}
void MainWnd::OnMouseMove(UINT nFlags, CPoint point)
{
winMouseOn();
CWnd::OnMouseMove(nFlags, point);
}
void MainWnd::OnInitMenu(CMenu* pMenu)
{
CWnd::OnInitMenu(pMenu);
soundPause();
}
void MainWnd::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CWnd::OnActivate(nState, pWndOther, bMinimized);
bool a = (nState == WA_ACTIVE) || (nState == WA_CLICKACTIVE);
if(a && theApp.input) {
theApp.active = a;
theApp.input->activate();
if(!theApp.paused && emulating) {
soundResume();
}
} else {
theApp.wasPaused = true;
if(theApp.pauseWhenInactive) {
if(emulating) {
soundPause();
}
theApp.active = a;
}
memset(theApp.delta,255,sizeof(theApp.delta));
}
if(theApp.paused && emulating)
{
theApp.painting = true;
systemDrawScreen();
theApp.painting = false;
theApp.renderedFrames--;
}
}
void MainWnd::OnDropFiles(HDROP hDropInfo)
{
char szFile[1024];
if(DragQueryFile(hDropInfo,
0,
szFile,
1024)) {
theApp.szFile = szFile;
if(FileRun()) {
SetForegroundWindow();
emulating = TRUE;
} else {
emulating = FALSE;
soundPause();
}
}
DragFinish(hDropInfo);
}
LRESULT MainWnd::OnMySysCommand(WPARAM wParam, LPARAM lParam)
{
if(emulating && !theApp.paused) {
if((wParam&0xFFF0) == SC_SCREENSAVE || (wParam&0xFFF0) == SC_MONITORPOWER)
return 0;
}
return Default();
}
void MainWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// pause sound before process is halted
if( emulating ) {
soundPause();
}
CWnd::OnNcLButtonDown(nHitTest, point);
}
void MainWnd::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CWnd::OnWindowPosChanging(lpwndpos);
// pause sound before changing window position/size
if( emulating ) {
soundPause();
}
}