OSDN Git Service

DeviceConstantConverter.KeyToKeys[], DeviceConstantConverter.DIKtoKey[] を実装。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
index ddac1f4..4ddd7fc 100644 (file)
@@ -5,30 +5,31 @@ using System.Text;
 using System.Windows.Forms;\r
 using System.Drawing;\r
 using System.Diagnostics;\r
-using System.Runtime.InteropServices;\r
 using System.IO;\r
 using System.Threading;\r
-using System.Runtime.Serialization.Formatters.Binary;\r
-using SlimDX;\r
-using SlimDX.Direct3D9;\r
+using SharpDX;\r
+using SharpDX.Direct3D9;\r
 using FDK;\r
 using SampleFramework;\r
 using System.Runtime.Serialization;\r
 using System.Xml;\r
 \r
+using Point = System.Drawing.Point;\r
+using Color = System.Drawing.Color;\r
+\r
 namespace DTXMania\r
 {\r
        internal class CDTXMania : Game\r
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "105(160214)";\r
+               public static readonly string VERSION = "108+(170506)";\r
                public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
-               public static readonly string D3DXDLL = "d3dx9_43.dll";         // June 2010\r
-               //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
-               //public static readonly string D3DXDLL = "d3dx9_41.dll";       // March 2009\r
-\r
+               public static readonly string D3DXDLL = "d3dx9_43.dll";     // June 2010\r
+                                                                                                                                                                                                                                                               //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
+                                                                                                                                                                                                                                                               //public static readonly string D3DXDLL = "d3dx9_41.dll";       // March 2009\r
                private static CDTXMania instance = new CDTXMania();\r
+\r
                public static CDTXMania Instance\r
                {\r
                        get\r
@@ -38,7 +39,9 @@ namespace DTXMania
                }\r
                public C文字コンソール act文字コンソール { get; private set; }\r
                public bool bコンパクトモード { get; private set; }\r
-               public CConfigIni ConfigIni { get; private set; }\r
+               public CConfigXml ConfigIni;\r
+               public CResources Resources;\r
+\r
                public CDTX DTX\r
                {\r
                        get\r
@@ -74,7 +77,7 @@ namespace DTXMania
                                                return c曲リストノード.nPerfect範囲ms;\r
                                        }\r
                                }\r
-                               return ConfigIni.nヒット範囲ms.Perfect;\r
+                               return ConfigIni.nHitRange.Perfect;\r
                        }\r
                }\r
                public int nGreat範囲ms\r
@@ -89,7 +92,7 @@ namespace DTXMania
                                                return c曲リストノード.nGreat範囲ms;\r
                                        }\r
                                }\r
-                               return ConfigIni.nヒット範囲ms.Great;\r
+                               return ConfigIni.nHitRange.Great;\r
                        }\r
                }\r
                public int nGood範囲ms\r
@@ -104,7 +107,7 @@ namespace DTXMania
                                                return c曲リストノード.nGood範囲ms;\r
                                        }\r
                                }\r
-                               return ConfigIni.nヒット範囲ms.Good;\r
+                               return ConfigIni.nHitRange.Good;\r
                        }\r
                }\r
                public int nPoor範囲ms\r
@@ -119,7 +122,7 @@ namespace DTXMania
                                                return c曲リストノード.nPoor範囲ms;\r
                                        }\r
                                }\r
-                               return ConfigIni.nヒット範囲ms.Poor;\r
+                               return ConfigIni.nHitRange.Poor;\r
                        }\r
                }\r
                #endregion\r
@@ -151,7 +154,7 @@ namespace DTXMania
                public bool bApplicationActive { get; private set; }\r
                public bool b次のタイミングで垂直帰線同期切り替えを行う { get; set; }\r
                public bool b次のタイミングで全画面_ウィンドウ切り替えを行う { get; set; }\r
-               public Coordinates Coordinates { get; set; }\r
+               public Coordinates.CCoordinates Coordinates;\r
                public Device Device\r
                {\r
                        get\r
@@ -162,9 +165,9 @@ namespace DTXMania
                public CPluginHost PluginHost { get; private set; }\r
                public List<STPlugin> listプラグイン = new List<STPlugin>();\r
 \r
-               private Size currentClientSize { get; set; }    // #23510 2010.10.27 add yyagi to keep current window size\r
-               //              public static CTimer ct;\r
-               public IntPtr WindowHandle                                      // 2012.10.24 yyagi; to add ASIO support\r
+               private Size currentClientSize { get; set; }    // #23510 2010.10.27 add yyagi to keep current window size\r
+                                                                                                                                                                                                               //              public static CTimer ct;\r
+               public IntPtr WindowHandle                  // 2012.10.24 yyagi; to add ASIO support\r
                {\r
                        get\r
                        {\r
@@ -183,7 +186,6 @@ namespace DTXMania
                public void InitializeInstance()\r
                {\r
                        #region [ strEXEのあるフォルダを決定する ]\r
-                       //-----------------\r
                        // BEGIN #23629 2010.11.13 from: デバッグ時は Application.ExecutablePath が ($SolutionDir)/bin/x86/Debug/ などになり System/ の読み込みに失敗するので、カレントディレクトリを採用する。(プロジェクトのプロパティ→デバッグ→作業ディレクトリが有効になる)\r
 #if DEBUG\r
                        strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";\r
@@ -192,51 +194,62 @@ namespace DTXMania
                        strEXEのあるフォルダ = Path.GetDirectoryName(Application.ExecutablePath) + @"\"; // #23629 2010.11.9 yyagi: set correct pathname where DTXManiaGR.exe is.\r
 #endif\r
                        // END #23629 2010.11.13 from\r
-                       //-----------------\r
                        #endregion\r
 \r
-                       #region [ Config.ini の読込み ]\r
-                       //---------------------\r
-                       ConfigIni = new CConfigIni();\r
-                       string path = strEXEのあるフォルダ + "Config.ini";\r
-                       if (File.Exists(path))\r
+                       #region [ 言語リソースの初期化 ]\r
+                       Trace.TraceInformation( "言語リソースの初期化を行います。" );\r
+                       Trace.Indent();\r
+                       try\r
                        {\r
-                               try\r
-                               {\r
-                                       ConfigIni.tファイルから読み込み(path);\r
-                               }\r
-                               catch\r
-                               {\r
-                                       //ConfigIni = new CConfigIni(); // 存在してなければ新規生成\r
-                               }\r
+                               Resources = new CResources();\r
+                               Resources.LoadResources( "" );\r
+                               Trace.TraceInformation( "言語リソースの初期化を完了しました。" );\r
                        }\r
-                       this.Window.EnableSystemMenu = CDTXMania.Instance.ConfigIni.bIsEnabledSystemMenu;       // #28200 2011.5.1 yyagi\r
-                       // 2012.8.22 Config.iniが無いときに初期値が適用されるよう、この設定行をifブロック外に移動\r
+                       finally\r
+                       {\r
+                               Trace.Unindent();\r
+                       }\r
+                       #endregion\r
 \r
-                       //---------------------\r
+                       #region [ Config.ini の読込み ]\r
+                       ConfigIni = new CConfigXml();\r
+                       CDTXMania.Instance.LoadConfig();\r
+                       // #28200 2011.5.1 yyagi\r
+                       this.Window.EnableSystemMenu = CDTXMania.Instance.ConfigIni.bIsEnabledSystemMenu;\r
+                       // 2012.8.22 Config.iniが無いときに初期値が適用されるよう、この設定行をifブロック外に移動\r
                        #endregion\r
 \r
+\r
                        #region[座標値読み込み]\r
-                       Coordinates = new Coordinates();\r
+                       Coordinates = new Coordinates.CCoordinates();\r
                        UpdateCoordinates();\r
+                       //Coordinates = (DTXMania.Coordinates.CCoordinates) CDTXMania.DeserializeXML( strEXEのあるフォルダ + "Coordinates.xml", typeof( DTXMania.Coordinates.CCoordinates ) );\r
+                       //if ( Coordinates == null )\r
+                       //{\r
+                       //      if ( File.Exists( strEXEのあるフォルダ + "Coordinates.xml" ) )\r
+                       //      {\r
+                       //              Trace.TraceInformation( "Coordinates.xmlファイルは存在します。" );\r
+                       //      }\r
+                       //      Trace.TraceInformation( "Coordiantes.xmlファイルの読み込みができませんでした。無視して進めます。" );\r
+                       //      Coordinates = new Coordinates.CCoordinates();\r
+                       //}\r
                        #endregion\r
 \r
                        #region [ ログ出力開始 ]\r
-                       //---------------------\r
                        Trace.AutoFlush = true;\r
-                       if (ConfigIni.bログ出力)\r
+                       if (ConfigIni.bLog)\r
                        {\r
                                try\r
                                {\r
                                        Trace.Listeners.Add(new CTraceLogListener(new StreamWriter(System.IO.Path.Combine(strEXEのあるフォルダ, "DTXManiaLog.txt"), false, Encoding.GetEncoding("utf-16"))));\r
                                }\r
-                               catch (System.UnauthorizedAccessException)                      // #24481 2011.2.20 yyagi\r
+                               catch (System.UnauthorizedAccessException)          // #24481 2011.2.20 yyagi\r
                                {\r
                                        int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
                                        string[] mes_writeErr = {\r
-                                               "DTXManiaLog.txtへの書き込みができませんでした。書き込みできるようにしてから、再度起動してください。",\r
-                                               "Failed to write DTXManiaLog.txt. Please set it writable and try again."\r
-                                       };\r
+                                                                                               "DTXManiaLog.txtへの書き込みができませんでした。書き込みできるようにしてから、再度起動してください。",\r
+                                                                                               "Failed to write DTXManiaLog.txt. Please set it writable and try again."\r
+                                                                               };\r
                                        MessageBox.Show(mes_writeErr[c], "DTXMania boot error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
                                        Environment.Exit(1);\r
                                }\r
@@ -250,10 +263,19 @@ namespace DTXMania
                        Trace.TraceInformation("OS Version: " + Environment.OSVersion);\r
                        Trace.TraceInformation("ProcessorCount: " + Environment.ProcessorCount.ToString());\r
                        Trace.TraceInformation("CLR Version: " + Environment.Version.ToString());\r
-                       //---------------------\r
                        #endregion\r
+\r
+                       #region [ 言語の設定 ]\r
+                       Trace.TraceInformation( "言語情報の読み込みを開始します。" );\r
+                       //Debug.WriteLine( "language=" + Resources.Language );\r
+                       //Debug.WriteLine( "settings=" + instance.ConfigIni.strLanguage );\r
+                       Resources.Language = instance.ConfigIni.strLanguage;\r
+                       Trace.TraceInformation( "言語を{0}に設定しました。", Resources.Language );\r
+\r
+                       #endregion\r
+\r
+       \r
                        #region [ DTXVmodeクラス の初期化 ]\r
-                       //---------------------\r
                        //Trace.TraceInformation( "DTXVモードの初期化を行います。" );\r
                        //Trace.Indent();\r
                        try\r
@@ -266,10 +288,8 @@ namespace DTXMania
                        {\r
                                //Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
                        #region [ コンパクトモードスイッチの有無、もしくは、DTXViewerとしての起動 ]\r
-                       //---------------------\r
                        bコンパクトモード = false;\r
                        strコンパクトモードファイル = "";\r
                        string[] commandLineArgs = Environment.GetCommandLineArgs();\r
@@ -292,39 +312,46 @@ namespace DTXMania
                                DTXVmode.ParseArguments(arg);\r
                                if (DTXVmode.Enabled)\r
                                {\r
-                                       DTXVmode.Refreshed = false;                                                             // 初回起動時は再読み込みに走らせない\r
+                                       DTXVmode.Refreshed = false;                             // 初回起動時は再読み込みに走らせない\r
                                        strコンパクトモードファイル = DTXVmode.filename;\r
-                                       switch (DTXVmode.soundDeviceType)                                               // サウンド再生方式の設定\r
+                                       switch (DTXVmode.soundDeviceType)                       // サウンド再生方式の設定\r
                                        {\r
                                                case ESoundDeviceType.DirectSound:\r
-                                                       ConfigIni.nSoundDeviceType = 0;\r
+                                                       ConfigIni.nSoundDeviceType.Value = ESoundDeviceTypeForConfig.DSound;\r
                                                        break;\r
                                                case ESoundDeviceType.ExclusiveWASAPI:\r
-                                                       ConfigIni.nSoundDeviceType = 2;\r
+                                                       ConfigIni.nSoundDeviceType.Value = ESoundDeviceTypeForConfig.WASAPI;\r
                                                        break;\r
                                                case ESoundDeviceType.ASIO:\r
-                                                       ConfigIni.nSoundDeviceType = 1;\r
-                                                       ConfigIni.nASIODevice = DTXVmode.nASIOdevice;\r
+                                                       ConfigIni.nSoundDeviceType.Value = ESoundDeviceTypeForConfig.ASIO;\r
+                                                       ConfigIni.strASIODevice.Index = DTXVmode.nASIOdevice;\r
                                                        break;\r
                                        }\r
 \r
-                                       CDTXMania.Instance.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;\r
-                                       CDTXMania.Instance.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;\r
-                                       CDTXMania.Instance.ConfigIni.bDrums有効 = !DTXVmode.GRmode;\r
-                                       CDTXMania.Instance.ConfigIni.bGuitar有効 = true;\r
+                                       CDTXMania.Instance.ConfigIni.bVSyncWait.Value = DTXVmode.VSyncWait;\r
+                                       CDTXMania.Instance.ConfigIni.bTimeStretch.Value = DTXVmode.TimeStretch;\r
+                                       if (DTXVmode.GRmode)\r
+                                       {\r
+                                               CDTXMania.Instance.ConfigIni.eActiveInst.Value = EActiveInstrument.GBOnly;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               CDTXMania.Instance.ConfigIni.eActiveInst.Value = EActiveInstrument.Both;\r
+                                       }\r
 \r
-                                       CDTXMania.Instance.ConfigIni.b全画面モード = false;\r
-                                       CDTXMania.Instance.ConfigIni.nウインドウwidth = CDTXMania.Instance.ConfigIni.nViewerウインドウwidth;\r
-                                       CDTXMania.Instance.ConfigIni.nウインドウheight = CDTXMania.Instance.ConfigIni.nViewerウインドウheight;\r
-                                       CDTXMania.Instance.ConfigIni.n初期ウィンドウ開始位置X = CDTXMania.Instance.ConfigIni.nViewer初期ウィンドウ開始位置X;\r
-                                       CDTXMania.Instance.ConfigIni.n初期ウィンドウ開始位置Y = CDTXMania.Instance.ConfigIni.nViewer初期ウィンドウ開始位置Y;\r
+                                       CDTXMania.Instance.ConfigIni.bFullScreen.Value = false;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow_backup = CDTXMania.Instance.ConfigIni.rcWindow;           // #36612 2016.9.12 yyagi\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow.W = CDTXMania.Instance.ConfigIni.rcViewerWindow.W;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow.H = CDTXMania.Instance.ConfigIni.rcViewerWindow.H;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow.X = CDTXMania.Instance.ConfigIni.rcViewerWindow.X;\r
+                                       CDTXMania.Instance.ConfigIni.rcWindow.Y = CDTXMania.Instance.ConfigIni.rcViewerWindow.Y;\r
                                }\r
-                               else                                                                                                            // 通常のコンパクトモード\r
+                               else                                                        // 通常のコンパクトモード\r
                                {\r
                                        strコンパクトモードファイル = commandLineArgs[1];\r
                                }\r
 \r
-                               if (!File.Exists(strコンパクトモードファイル))              // #32985 2014.1.23 yyagi \r
+                               if (!File.Exists(strコンパクトモードファイル))      // #32985 2014.1.23 yyagi \r
                                {\r
                                        Trace.TraceError("コンパクトモードで指定されたファイルが見つかりません。DTXManiaを終了します。[{0}]", strコンパクトモードファイル);\r
 #if DEBUG\r
@@ -349,11 +376,13 @@ namespace DTXMania
                                        Trace.TraceInformation("コンパクトモードで起動します。[{0}]", strコンパクトモードファイル);\r
                                }\r
                        }\r
-                       //---------------------\r
+                       else\r
+                       {\r
+                               Trace.TraceInformation( "通常モードで起動します。" );\r
+                       }\r
                        #endregion\r
 \r
                        #region [ Input管理 の初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("DirectInput, MIDI入力の初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
@@ -362,21 +391,21 @@ namespace DTXMania
                                Input管理 = new CInput管理(base.Window.Handle, bUseMIDIIn);\r
                                foreach (IInputDevice device in Input管理.list入力デバイス)\r
                                {\r
-                                       if ((device.e入力デバイス種別 == E入力デバイス種別.Joystick) && !ConfigIni.dicJoystick.ContainsValue(device.GUID))\r
+                                       if ((device.e入力デバイス種別 == E入力デバイス種別.Joystick) && !ConfigIni.dicJoystick.Value.ContainsValue(device.GUID))\r
                                        {\r
                                                int key = 0;\r
-                                               while (ConfigIni.dicJoystick.ContainsKey(key))\r
+                                               while (ConfigIni.dicJoystick.Value.ContainsKey(key))\r
                                                {\r
                                                        key++;\r
                                                }\r
-                                               ConfigIni.dicJoystick.Add(key, device.GUID);\r
+                                               ConfigIni.dicJoystick.Value.Add(key, device.GUID);\r
                                        }\r
                                }\r
                                foreach (IInputDevice device2 in Input管理.list入力デバイス)\r
                                {\r
                                        if (device2.e入力デバイス種別 == E入力デバイス種別.Joystick)\r
                                        {\r
-                                               foreach (KeyValuePair<int, string> pair in ConfigIni.dicJoystick)\r
+                                               foreach (KeyValuePair<int, string> pair in ConfigIni.dicJoystick.Value)\r
                                                {\r
                                                        if (device2.GUID.Equals(pair.Value))\r
                                                        {\r
@@ -396,9 +425,9 @@ namespace DTXMania
 \r
                                int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;\r
                                string[] mes_writeErr = {\r
-                                               "DirectInputまたはMIDI入力の初期化に失敗しました。DTXManiaGRを終了します。",\r
-                                               "Failed to initialize DirectInput (or MIDI-IN)."\r
-                               };\r
+                                                                                               "DirectInputまたはMIDI入力の初期化に失敗しました。DTXManiaGRを終了します。",\r
+                                                                                               "Failed to initialize DirectInput (or MIDI-IN)."\r
+                                                               };\r
                                MessageBox.Show(mes_writeErr[c], "DTXMania boot error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
                                Environment.Exit(1);\r
                        }\r
@@ -406,73 +435,66 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
 \r
                        #region [ ウィンドウ初期化 ]\r
-                       //---------------------\r
-                       base.Window.StartPosition = FormStartPosition.Manual;                                                       // #30675 2013.02.04 ikanick add\r
-                       base.Window.Location = new Point(ConfigIni.n初期ウィンドウ開始位置X, ConfigIni.n初期ウィンドウ開始位置Y);   // #30675 2013.02.04 ikanick add\r
-\r
-                       base.Window.Text = this.strWindowTitle;         // 事前にDTXVmodeの実体を作っておくこと\r
-\r
-                       base.Window.StartPosition = FormStartPosition.Manual;                                                       // #30675 2013.02.04 ikanick add\r
-                       base.Window.Location = new Point(ConfigIni.n初期ウィンドウ開始位置X, ConfigIni.n初期ウィンドウ開始位置Y);   // #30675 2013.02.04 ikanick add\r
-\r
-                       if (ConfigIni.nウインドウwidth <= 0 && ConfigIni.nウインドウheight <= 0)              // #34069 2014.7.24 yyagi 初回起動時は1280x720にする\r
-                       {\r
-                               ConfigIni.nウインドウwidth = 1280;\r
-                               ConfigIni.nウインドウheight = 720;\r
-                               //w = this.Window.Screen.WorkingArea.Width;\r
-                               //h = this.Window.Screen.WorkingArea.Height;\r
-                               //w = base.Window.Screen.Bounds.Width;\r
-                               //h = base.Window.Screen.Bounds.Height;\r
-                               //ConfigIni.nウインドウwidth = SampleFramework.GameWindowSize.Width;\r
-                               //ConfigIni.nウインドウheight = SampleFramework.GameWindowSize.Height;\r
-                       }\r
-\r
-                       base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);   // #34510 yyagi 2010.10.31 to change window size got from Config.ini\r
+                       // #30675 2013.02.04 ikanick add\r
+                       base.Window.StartPosition = FormStartPosition.Manual;\r
+                       base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
+                       // 事前にDTXVmodeの実体を作っておくこと\r
+                       base.Window.Text = this.strWindowTitle;\r
+                       //base.Window.StartPosition = FormStartPosition.Manual;\r
+                       //base.Window.Location = new Point(ConfigIni.rcWindow.X, ConfigIni.rcWindow.Y);\r
+\r
+                       // #34510 yyagi 2010.10.31 to change window size got from Config.ini\r
+                       base.Window.ClientSize = new Size(ConfigIni.rcWindow.W, ConfigIni.rcWindow.H);\r
 #if !WindowedFullscreen\r
                        if (!ConfigIni.bウィンドウモード)                                               // #23510 2010.11.02 yyagi: add; to recover window size in case bootup with fullscreen mode\r
                        {                                                                                                               // #30666 2013.02.02 yyagi: currentClientSize should be always made\r
 #endif\r
-                       currentClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);\r
+                       currentClientSize = new Size(ConfigIni.rcWindow.W, ConfigIni.rcWindow.H);\r
 #if !WindowedFullscreen\r
                        }\r
 #endif\r
-                       base.Window.MaximizeBox = true;                                                 // #23510 2010.11.04 yyagi: to support maximizing window\r
-                       base.Window.FormBorderStyle = FormBorderStyle.Sizable;  // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize\r
+                       // #23510 2010.11.04 yyagi: to support maximizing window\r
+                       base.Window.MaximizeBox = true;\r
+                       // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize\r
+                       base.Window.FormBorderStyle = FormBorderStyle.Sizable;\r
                        // #30666 2013.02.02 yyagi: moved the code to t全画面・ウインドウモード切り替え()\r
                        base.Window.ShowIcon = true;\r
                        base.Window.Icon = Properties.Resources.dtx;\r
                        base.Window.KeyDown += new KeyEventHandler(this.Window_KeyDown);\r
                        base.Window.MouseUp += new MouseEventHandler(this.Window_MouseUp);\r
-                       base.Window.MouseDoubleClick += new MouseEventHandler(this.Window_MouseDoubleClick);    // #23510 2010.11.13 yyagi: to go fullscreen mode\r
-                       base.Window.ResizeEnd += new EventHandler(this.Window_ResizeEnd);                                               // #23510 2010.11.20 yyagi: to set resized window size in Config.ini\r
+                       // #23510 2010.11.13 yyagi: to go fullscreen mode\r
+                       base.Window.MouseDoubleClick += new MouseEventHandler(this.Window_MouseDoubleClick);\r
+                       // #23510 2010.11.20 yyagi: to set resized window size in Config.ini\r
+                       base.Window.ResizeEnd += new EventHandler(this.Window_ResizeEnd);\r
                        base.Window.ApplicationActivated += new EventHandler(this.Window_ApplicationActivated);\r
                        base.Window.ApplicationDeactivated += new EventHandler(this.Window_ApplicationDeactivated);\r
                        base.Window.MouseMove += new MouseEventHandler(this.Window_MouseMove);\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ Direct3D9Exを使うかどうか判定 ]\r
                        #endregion\r
+\r
                        #region [ Direct3D9 デバイスの生成 ]\r
-                       //---------------------\r
                        DeviceSettings settings = new DeviceSettings();\r
 #if WindowedFullscreen\r
-                       settings.Windowed = true;                                                               // #30666 2013.2.2 yyagi: Fullscreenmode is "Maximized window" mode\r
+                       // #30666 2013.2.2 yyagi: Fullscreenmode is "Maximized window" mode\r
+                       settings.Windowed = true;\r
 #else\r
                        settings.Windowed = ConfigIni.bウィンドウモード;\r
 #endif\r
                        settings.BackBufferWidth = SampleFramework.GameWindowSize.Width;\r
                        settings.BackBufferHeight = SampleFramework.GameWindowSize.Height;\r
                        //                      settings.BackBufferCount = 3;\r
-                       settings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
+                       settings.EnableVSync = ConfigIni.bVSyncWait;\r
                        //                      settings.BackBufferFormat = Format.A8R8G8B8;\r
-                       //                      settings.MultisampleType = MultisampleType.FourSamples;\r
-                       //                      settings.MultisampleQuality = 4;\r
+                       //      settings.MultisampleType = MultisampleType.FourSamples;\r
+                       //      settings.MultisampleQuality = 4;\r
                        //                      settings.MultisampleType = MultisampleType.None;\r
                        //                      settings.MultisampleQuality = 0;\r
+                       settings.Multithreaded = true;\r
 \r
                        try\r
                        {\r
@@ -484,29 +506,38 @@ namespace DTXMania
                                MessageBox.Show(e.Message + e.ToString(), "DTXMania failed to boot: DirectX9 Initialize Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
                                Environment.Exit(-1);\r
                        }\r
+                       Trace.TraceInformation("DeviceCaps       = " + base.GraphicsDeviceManager.Direct3D9.Device.Capabilities.DeviceCaps.ToString());\r
+                       Trace.TraceInformation("DeviceCaps2      = " + base.GraphicsDeviceManager.Direct3D9.Device.Capabilities.DeviceCaps2.ToString());\r
+                       Trace.TraceInformation("MaxTextureWidth  = " + base.GraphicsDeviceManager.Direct3D9.Device.Capabilities.MaxTextureWidth);\r
+                       Trace.TraceInformation("MaxTextureHeight = " + base.GraphicsDeviceManager.Direct3D9.Device.Capabilities.MaxTextureHeight);\r
+                       Trace.TraceInformation("TextureCaps      = " + base.GraphicsDeviceManager.Direct3D9.Device.Capabilities.TextureCaps.ToString());\r
 \r
                        base.IsFixedTimeStep = false;\r
                        //                      base.TargetElapsedTime = TimeSpan.FromTicks( 10000000 / 75 );\r
-                       base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);   // #23510 2010.10.31 yyagi: to recover window size. width and height are able to get from Config.ini.\r
-                       base.InactiveSleepTime = TimeSpan.FromMilliseconds((float)(ConfigIni.n非フォーカス時スリープms));    // #23568 2010.11.3 yyagi: to support valiable sleep value when !IsActive\r
+                       // #23510 2010.10.31 yyagi: to recover window size. width and height are able to get from Config.ini.\r
+                       base.Window.ClientSize = new Size(ConfigIni.rcWindow.W, ConfigIni.rcWindow.H);\r
+                       // #23568 2010.11.3 yyagi: to support valiable sleep value when !IsActive\r
+                       base.InactiveSleepTime = TimeSpan.FromMilliseconds((float)(ConfigIni.nSleepUnfocusMs));\r
                        // #23568 2010.11.4 ikanick changed ( 1 -> ConfigIni )\r
 #if WindowedFullscreen\r
-                       this.t全画面_ウィンドウモード切り替え();                         // #30666 2013.2.2 yyagi: finalize settings for "Maximized window mode"\r
+                       // #30666 2013.2.2 yyagi: finalize settings for "Maximized window mode"\r
+                       this.t全画面_ウィンドウモード切り替え();\r
 #endif\r
                        actFlushGPU = new CActFlushGPU();\r
-                       //---------------------\r
                        #endregion\r
 \r
                        DTX = null;\r
 \r
                        #region [ Skin の初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("スキンの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
                        {\r
-                               Skin = new CSkin(CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderFullName, CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);\r
-                               CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderFullName = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);    // 旧指定のSkinフォルダが消滅していた場合に備える\r
+                               Skin = new CSkin(\r
+                                       CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath,\r
+                                       CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);\r
+                               // 旧指定のSkinフォルダが消滅していた場合に備える\r
+                               CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);\r
                                Trace.TraceInformation("スキンの初期化を完了しました。");\r
                        }\r
                        catch\r
@@ -518,11 +549,9 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
-                       //-----------\r
+\r
                        #region [ Timer の初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("タイマの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
@@ -534,15 +563,13 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ マウス消去用のタイマーを初期化 ]\r
                        ccMouseShow = new CCounter();\r
                        #endregion\r
-                       //-----------\r
 \r
                        #region [ FPS カウンタの初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("FPSカウンタの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
@@ -554,10 +581,9 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ act文字コンソールの初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("文字コンソールの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
@@ -577,15 +603,14 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ Pad の初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("パッドの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
                        {\r
-                               Pad = new CPad(ConfigIni, Input管理);\r
+                               Pad = new CPad();\r
                                Trace.TraceInformation("パッドの初期化を完了しました。");\r
                        }\r
                        catch (Exception exception3)\r
@@ -597,24 +622,23 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ Sound管理 の初期化 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("サウンドデバイスの初期化を行います。");\r
                        Trace.Indent();\r
                        try\r
                        {\r
                                ESoundDeviceType soundDeviceType;\r
-                               switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType)\r
+                               switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)\r
                                {\r
-                                       case 0:\r
+                                       case ESoundDeviceTypeForConfig.DSound:\r
                                                soundDeviceType = ESoundDeviceType.DirectSound;\r
                                                break;\r
-                                       case 1:\r
+                                       case ESoundDeviceTypeForConfig.ASIO:\r
                                                soundDeviceType = ESoundDeviceType.ASIO;\r
                                                break;\r
-                                       case 2:\r
+                                       case ESoundDeviceTypeForConfig.WASAPI:\r
                                                soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;\r
                                                break;\r
                                        default:\r
@@ -624,9 +648,9 @@ namespace DTXMania
                                Sound管理 = new CSound管理(base.Window.Handle,\r
                                                                                        soundDeviceType,\r
                                                                                        CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,\r
-                                       // CDTXMania.Instance.ConfigIni.nASIOBufferSizeMs,\r
+                                                                                       CDTXMania.instance.ConfigIni.bEventDrivenWASAPI,\r
                                                                                        0,\r
-                                                                                       CDTXMania.Instance.ConfigIni.nASIODevice,\r
+                                                                                       CDTXMania.Instance.ConfigIni.strASIODevice.Index,\r
                                                                                        CDTXMania.Instance.ConfigIni.bUseOSTimer\r
                                );\r
                                //Sound管理 = FDK.CSound管理.Instance;\r
@@ -647,8 +671,8 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ Songs管理 の初期化 ]\r
                        //---------------------\r
                        Trace.TraceInformation("曲リストの初期化を行います。");\r
@@ -672,23 +696,20 @@ namespace DTXMania
                        }\r
                        //---------------------\r
                        #endregion\r
+\r
                        #region [ CAvi の初期化 ]\r
-                       //---------------------\r
                        CAvi.t初期化();\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ Random の初期化 ]\r
-                       //---------------------\r
                        Random = new Random((int)Timer.nシステム時刻);\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ ステージの初期化 ]\r
-                       //---------------------\r
                        r現在のステージ = null;\r
                        r直前のステージ = null;\r
                        stage起動 = new CStage起動();\r
                        stageタイトル = new CStageタイトル();\r
-                       //                      stageオプション = new CStageオプション();\r
                        stageコンフィグ = new CStageコンフィグ();\r
                        stage選曲 = new CStage選曲();\r
                        stage曲読み込み = new CStage曲読み込み();\r
@@ -696,12 +717,12 @@ namespace DTXMania
                        stage結果 = new CStage結果();\r
                        stageChangeSkin = new CStageChangeSkin();\r
                        stage終了 = new CStage終了();\r
+\r
                        this.listトップレベルActivities = new List<CActivity>();\r
                        this.listトップレベルActivities.Add(actEnumSongs);\r
                        this.listトップレベルActivities.Add(act文字コンソール);\r
                        this.listトップレベルActivities.Add(stage起動);\r
                        this.listトップレベルActivities.Add(stageタイトル);\r
-                       //                      this.listトップレベルActivities.Add( stageオプション );\r
                        this.listトップレベルActivities.Add(stageコンフィグ);\r
                        this.listトップレベルActivities.Add(stage選曲);\r
                        this.listトップレベルActivities.Add(stage曲読み込み);\r
@@ -710,10 +731,9 @@ namespace DTXMania
                        this.listトップレベルActivities.Add(stageChangeSkin);\r
                        this.listトップレベルActivities.Add(stage終了);\r
                        this.listトップレベルActivities.Add(actFlushGPU);\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ プラグインの検索と生成 ]\r
-                       //---------------------\r
                        PluginHost = new CPluginHost();\r
 \r
                        Trace.TraceInformation("プラグインの検索と生成を行います。");\r
@@ -727,10 +747,9 @@ namespace DTXMania
                        {\r
                                Trace.Unindent();\r
                        }\r
-                       //---------------------\r
                        #endregion\r
+\r
                        #region [ プラグインの初期化 ]\r
-                       //---------------------\r
                        if (this.listプラグイン != null && this.listプラグイン.Count > 0)\r
                        {\r
                                Trace.TraceInformation("プラグインの初期化を行います。");\r
@@ -757,14 +776,12 @@ namespace DTXMania
                                        Trace.Unindent();\r
                                }\r
                        }\r
-\r
-                       //---------------------\r
                        #endregion\r
 \r
+\r
                        Trace.TraceInformation("アプリケーションの初期化を完了しました。");\r
 \r
                        #region [ 最初のステージの起動 ]\r
-                       //---------------------\r
                        Trace.TraceInformation("----------------------");\r
                        Trace.TraceInformation("■ 起動");\r
 \r
@@ -777,13 +794,9 @@ namespace DTXMania
                                r現在のステージ = stage起動;\r
                        }\r
                        r現在のステージ.On活性化();\r
-                       //---------------------\r
                        #endregion\r
                }\r
 \r
-\r
-               // メソッド\r
-\r
                public void t全画面_ウィンドウモード切り替え()\r
                {\r
 #if WindowedFullscreen\r
@@ -796,17 +809,17 @@ namespace DTXMania
 #if !WindowedFullscreen\r
                                settings.Windowed = ConfigIni.bウィンドウモード;\r
 #endif\r
-                               if (ConfigIni.bウィンドウモード == false)       // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode\r
+                               if (ConfigIni.bウィンドウモード == false)   // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode\r
                                {\r
                                        currentClientSize = this.Window.ClientSize;\r
-                                       ConfigIni.nウインドウwidth = this.Window.ClientSize.Width;\r
-                                       ConfigIni.nウインドウheight = this.Window.ClientSize.Height;\r
+                                       ConfigIni.rcWindow.W = this.Window.ClientSize.Width;\r
+                                       ConfigIni.rcWindow.H = this.Window.ClientSize.Height;\r
                                        //                                      FDK.CTaskBar.ShowTaskBar( false );\r
                                }\r
 #if !WindowedFullscreen\r
                                base.GraphicsDeviceManager.ChangeDevice( settings );\r
 #endif\r
-                               if (ConfigIni.bウィンドウモード == true)        // #23510 2010.10.27 yyagi: to resume window size from backuped value\r
+                               if (ConfigIni.bウィンドウモード == true)    // #23510 2010.10.27 yyagi: to resume window size from backuped value\r
                                {\r
 #if WindowedFullscreen\r
                                        // #30666 2013.2.2 yyagi Don't use Fullscreen mode becasue NVIDIA GeForce is\r
@@ -817,7 +830,7 @@ namespace DTXMania
                                        Instance.Window.WindowState = FormWindowState.Normal;\r
 #endif\r
                                        base.Window.ClientSize =\r
-                                               new Size(currentClientSize.Width, currentClientSize.Height);\r
+                                                       new Size(currentClientSize.Width, currentClientSize.Height);\r
                                        //                                      FDK.CTaskBar.ShowTaskBar( true );\r
                                }\r
 #if WindowedFullscreen\r
@@ -899,7 +912,10 @@ namespace DTXMania
 \r
                        #region [ 現在の電源プランをバックアップし、HighPerformanceに変更 ]\r
                        CPowerPlan.BackupCurrentPowerPlan();\r
-                       CPowerPlan.ChangeHighPerformance();\r
+                       if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )\r
+                       {\r
+                               CPowerPlan.ChangeHighPerformance();\r
+                       }\r
                        #endregion\r
 \r
 \r
@@ -979,8 +995,8 @@ namespace DTXMania
                }\r
                protected override void OnExiting(EventArgs e)\r
                {\r
-                       CPowerPlan.RestoreCurrentPowerPlan();                   // 電源プランを元のものに戻す\r
-                       CPowerManagement.tEnableMonitorSuspend();               // スリープ抑止状態を解除\r
+                       CPowerPlan.RestoreCurrentPowerPlan();           // 電源プランを元のものに戻す\r
+                       CPowerManagement.tEnableMonitorSuspend();       // スリープ抑止状態を解除\r
                        this.t終了処理();\r
                        base.OnExiting(e);\r
                }\r
@@ -997,7 +1013,7 @@ namespace DTXMania
                                CSound管理.rc演奏用タイマ.t更新();\r
 \r
                        if (Input管理 != null)\r
-                               Input管理.tポーリング(this.bApplicationActive, CDTXMania.Instance.ConfigIni.bバッファ入力を行う);\r
+                               Input管理.tポーリング(this.bApplicationActive, CDTXMania.Instance.ConfigIni.bBufferedInput);\r
 \r
                        if (FPS != null)\r
                                FPS.tカウンタ更新();\r
@@ -1008,19 +1024,19 @@ namespace DTXMania
                        if (this.Device == null)\r
                                return;\r
 \r
-                       if (this.bApplicationActive)    // DTXMania本体起動中の本体/モニタの省電力モード移行を抑止\r
+                       if (this.bApplicationActive)    // DTXMania本体起動中の本体/モニタの省電力モード移行を抑止\r
                                CPowerManagement.tDisableMonitorSuspend();\r
 \r
                        // #xxxxx 2013.4.8 yyagi; sleepの挿入位置を、EndScnene~Present間から、BeginScene前に移動。描画遅延を小さくするため。\r
                        #region [ スリープ ]\r
-                       if (ConfigIni.nフレーム毎スリープms >= 0)                      // #xxxxx 2011.11.27 yyagi\r
+                       if (ConfigIni.nSleepPerFrameMs >= 0)            // #xxxxx 2011.11.27 yyagi\r
                        {\r
-                               Thread.Sleep(ConfigIni.nフレーム毎スリープms);\r
+                               Thread.Sleep(ConfigIni.nSleepPerFrameMs);\r
                        }\r
                        #endregion\r
 \r
                        #region [ DTXCreatorからの指示 ]\r
-                       if (this.Window.IsReceivedMessage)      // ウインドウメッセージで、\r
+                       if (this.Window.IsReceivedMessage)  // ウインドウメッセージで、\r
                        {\r
                                string strMes = this.Window.strMessage;\r
                                this.Window.IsReceivedMessage = false;\r
@@ -1068,7 +1084,7 @@ namespace DTXMania
                        #endregion\r
 \r
                        this.Device.BeginScene();\r
-                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0);\r
+                       this.Device.Clear(ClearFlags.ZBuffer | ClearFlags.Target, SharpDX.Color.Black, 1f, 0);\r
 \r
                        if (r現在のステージ != null)\r
                        {\r
@@ -1093,7 +1109,7 @@ namespace DTXMania
 \r
                                CScoreIni scoreIni = null;\r
 \r
-                               if (Control.IsKeyLocked(Keys.CapsLock))                         // #30925 2013.3.11 yyagi; capslock=ON時は、EnumSongsしないようにして、起動負荷とASIOの音切れの関係を確認する\r
+                               if (Control.IsKeyLocked(Keys.CapsLock))             // #30925 2013.3.11 yyagi; capslock=ON時は、EnumSongsしないようにして、起動負荷とASIOの音切れの関係を確認する\r
                                {\r
                                        // → songs.db等の書き込み時だと音切れするっぽい\r
                                        actEnumSongs.On非活性化();\r
@@ -1103,7 +1119,7 @@ namespace DTXMania
                                #region [ 曲検索スレッドの起動/終了 ここに"Enumerating Songs..."表示を集約 ]\r
                                if (!CDTXMania.Instance.bコンパクトモード)\r
                                {\r
-                                       actEnumSongs.On進行描画();                                                  // "Enumerating Songs..."アイコンの描画\r
+                                       actEnumSongs.On進行描画();                          // "Enumerating Songs..."アイコンの描画\r
                                }\r
                                switch (r現在のステージ.eステージID)\r
                                {\r
@@ -1115,15 +1131,15 @@ namespace DTXMania
                                                {\r
                                                        #region [ (特定条件時) 曲検索スレッドの起動・開始 ]\r
                                                        if (r現在のステージ.eステージID == CStage.Eステージ.タイトル &&\r
-                                                                r直前のステージ.eステージID == CStage.Eステージ.起動 &&\r
-                                                                this.n進行描画の戻り値 == (int)CStageタイトル.E戻り値.継続 &&\r
-                                                                !EnumSongs.IsSongListEnumStarted)\r
+                                                                        r直前のステージ.eステージID == CStage.Eステージ.起動 &&\r
+                                                                        this.n進行描画の戻り値 == (int)CStageタイトル.E戻り値.継続 &&\r
+                                                                        !EnumSongs.IsSongListEnumStarted)\r
                                                        {\r
                                                                actEnumSongs.On活性化();\r
                                                                CDTXMania.Instance.stage選曲.bIsEnumeratingSongs = true;\r
-                                                               EnumSongs.Init(CDTXMania.Instance.Songs管理.listSongsDB, CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数);   // songs.db情報と、取得した曲数を、新インスタンスにも与える\r
-                                                               EnumSongs.StartEnumFromDisk();          // 曲検索スレッドの起動・開始\r
-                                                               if (CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数 == 0)      // もし初回起動なら、検索スレッドのプライオリティをLowestでなくNormalにする\r
+                                                               EnumSongs.Init(CDTXMania.Instance.Songs管理.listSongsDB, CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数); // songs.db情報と、取得した曲数を、新インスタンスにも与える\r
+                                                               EnumSongs.StartEnumFromDisk();      // 曲検索スレッドの起動・開始\r
+                                                               if (CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数 == 0)    // もし初回起動なら、検索スレッドのプライオリティをLowestでなくNormalにする\r
                                                                {\r
                                                                        EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);\r
                                                                }\r
@@ -1135,11 +1151,11 @@ namespace DTXMania
                                                        {\r
                                                                switch (this.n進行描画の戻り値)\r
                                                                {\r
-                                                                       case 0:         // 何もない\r
-                                                                               //if ( CDTXMania.Instance.stage選曲.bIsEnumeratingSongs )\r
+                                                                       case 0:     // 何もない\r
+                                                                                                                       //if ( CDTXMania.Instance.stage選曲.bIsEnumeratingSongs )\r
                                                                                if (!CDTXMania.Instance.stage選曲.bIsPlayingPremovie)\r
                                                                                {\r
-                                                                                       EnumSongs.Resume();                                             // #27060 2012.2.6 yyagi 中止していたバックグランド曲検索を再開\r
+                                                                                       EnumSongs.Resume();                     // #27060 2012.2.6 yyagi 中止していたバックグランド曲検索を再開\r
                                                                                        EnumSongs.IsSlowdown = false;\r
                                                                                }\r
                                                                                else\r
@@ -1150,8 +1166,8 @@ namespace DTXMania
                                                                                actEnumSongs.On活性化();\r
                                                                                break;\r
 \r
-                                                                       case 2:         // 曲決定\r
-                                                                               EnumSongs.Suspend();                                            // #27060 バックグラウンドの曲検索を一時停止\r
+                                                                       case 2:     // 曲決定\r
+                                                                               EnumSongs.Suspend();                        // #27060 バックグラウンドの曲検索を一時停止\r
                                                                                actEnumSongs.On非活性化();\r
                                                                                break;\r
                                                                }\r
@@ -1160,9 +1176,9 @@ namespace DTXMania
 \r
                                                        #region [ 曲探索中断待ち待機 ]\r
                                                        if (r現在のステージ.eステージID == CStage.Eステージ.曲読み込み && !EnumSongs.IsSongListEnumCompletelyDone &&\r
-                                                               EnumSongs.thDTXFileEnumerate != null)                                                   // #28700 2012.6.12 yyagi; at Compact mode, enumerating thread does not exist.\r
+                                                                       EnumSongs.thDTXFileEnumerate != null)                           // #28700 2012.6.12 yyagi; at Compact mode, enumerating thread does not exist.\r
                                                        {\r
-                                                               EnumSongs.WaitUntilSuspended();                                                                 // 念のため、曲検索が一時中断されるまで待機\r
+                                                               EnumSongs.WaitUntilSuspended();                                 // 念のため、曲検索が一時中断されるまで待機\r
                                                        }\r
                                                        #endregion\r
 \r
@@ -1215,7 +1231,7 @@ namespace DTXMania
                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                        {\r
                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                               pg.plugin.Onステージ変更();\r
                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                        }\r
 \r
@@ -1288,7 +1304,7 @@ namespace DTXMania
                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                {\r
                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                       pg.plugin.Onステージ変更();\r
                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                }\r
 \r
@@ -1297,62 +1313,6 @@ namespace DTXMania
                                                #endregion\r
                                                break;\r
 \r
-                                       //                                      case CStage.Eステージ.オプション:\r
-                                       #region [ *** ]\r
-                                       //                                              //-----------------------------\r
-                                       //                                              if( this.n進行描画の戻り値 != 0 )\r
-                                       //                                              {\r
-                                       //                                                      switch( r直前のステージ.eステージID )\r
-                                       //                                                      {\r
-                                       //                                                              case CStage.Eステージ.タイトル:\r
-                                       //                                                                      #region [ *** ]\r
-                                       //                                                                      //-----------------------------\r
-                                       //                                                                      r現在のステージ.On非活性化();\r
-                                       //                                                                      Trace.TraceInformation( "----------------------" );\r
-                                       //                                                                      Trace.TraceInformation( "■ タイトル" );\r
-                                       //                                                                      stageタイトル.On活性化();\r
-                                       //                                                                      r直前のステージ = r現在のステージ;\r
-                                       //                                                                      r現在のステージ = stageタイトル;\r
-                                       //                                              \r
-                                       //                                                                      foreach( STPlugin pg in this.listプラグイン )\r
-                                       //                                                                      {\r
-                                       //                                                                              Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
-                                       //                                                                              pg.plugin.Onステージ変更();\r
-                                       //                                                                              Directory.SetCurrentDirectory( CDTXMania.Instance.strEXEのあるフォルダ );\r
-                                       //                                                                      }\r
-                                       //                                              \r
-                                       //                                                                      this.tガベージコレクションを実行する();\r
-                                       //                                                                      break;\r
-                                       //                                                              //-----------------------------\r
-                                       //                                                                      #endregion\r
-                                       //\r
-                                       //                                                              case CStage.Eステージ.選曲:\r
-                                       //                                                                      #region [ *** ]\r
-                                       //                                                                      //-----------------------------\r
-                                       //                                                                      r現在のステージ.On非活性化();\r
-                                       //                                                                      Trace.TraceInformation( "----------------------" );\r
-                                       //                                                                      Trace.TraceInformation( "■ 選曲" );\r
-                                       //                                                                      stage選曲.On活性化();\r
-                                       //                                                                      r直前のステージ = r現在のステージ;\r
-                                       //                                                                      r現在のステージ = stage選曲;\r
-                                       //\r
-                                       //                                                                      foreach( STPlugin pg in this.listプラグイン )\r
-                                       //                                                                      {\r
-                                       //                                                                              Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
-                                       //                                                                              pg.plugin.Onステージ変更();\r
-                                       //                                                                              Directory.SetCurrentDirectory( CDTXMania.Instance.strEXEのあるフォルダ );\r
-                                       //                                                                      }\r
-                                       //\r
-                                       //                                                                      this.tガベージコレクションを実行する();\r
-                                       //                                                                      break;\r
-                                       //                                                              //-----------------------------\r
-                                       //                                                                      #endregion\r
-                                       //                                                      }\r
-                                       //                                              }\r
-                                       //                                              //-----------------------------\r
-                                       #endregion\r
-                                       //                                              break;\r
-\r
                                        case CStage.Eステージ.コンフィグ:\r
                                                #region [ *** ]\r
                                                //-----------------------------\r
@@ -1373,14 +1333,14 @@ namespace DTXMania
                                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                                        {\r
                                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                               pg.plugin.Onステージ変更();\r
                                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                        }\r
 \r
                                                                        this.tガベージコレクションを実行する();\r
                                                                        break;\r
                                                                //-----------------------------\r
-                                                                       #endregion\r
+                                                               #endregion\r
 \r
                                                                case CStage.Eステージ.選曲:\r
                                                                        #region [ *** ]\r
@@ -1395,13 +1355,13 @@ namespace DTXMania
                                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                                        {\r
                                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                               pg.plugin.Onステージ変更();\r
                                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                        }\r
 \r
                                                                        this.tガベージコレクションを実行する();\r
                                                                        break;\r
-                                                               //-----------------------------\r
+                                                                       //-----------------------------\r
                                                                        #endregion\r
                                                        }\r
                                                }\r
@@ -1427,14 +1387,14 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
 \r
                                                                this.tガベージコレクションを実行する();\r
                                                                break;\r
                                                        //-----------------------------\r
-                                                               #endregion\r
+                                                       #endregion\r
 \r
                                                        case (int)CStage選曲.E戻り値.選曲した:\r
                                                                #region [ *** ]\r
@@ -1449,35 +1409,13 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
 \r
                                                                this.tガベージコレクションを実行する();\r
                                                                break;\r
                                                        //-----------------------------\r
-                                                               #endregion\r
-\r
-                                                       //                                                      case (int) CStage選曲.E戻り値.オプション呼び出し:\r
-                                                       #region [ *** ]\r
-                                                       //                                                              //-----------------------------\r
-                                                       //                                                              r現在のステージ.On非活性化();\r
-                                                       //                                                              Trace.TraceInformation( "----------------------" );\r
-                                                       //                                                              Trace.TraceInformation( "■ オプション" );\r
-                                                       //                                                              stageオプション.On活性化();\r
-                                                       //                                                              r直前のステージ = r現在のステージ;\r
-                                                       //                                                              r現在のステージ = stageオプション;\r
-                                                       //\r
-                                                       //                                                              foreach( STPlugin pg in this.listプラグイン )\r
-                                                       //                                                              {\r
-                                                       //                                                                      Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
-                                                       //                                                                      pg.plugin.Onステージ変更();\r
-                                                       //                                                                      Directory.SetCurrentDirectory( CDTXMania.Instance.strEXEのあるフォルダ );\r
-                                                       //                                                              }\r
-                                                       //\r
-                                                       //                                                              this.tガベージコレクションを実行する();\r
-                                                       //                                                              break;\r
-                                                       //                                                      //-----------------------------\r
                                                        #endregion\r
 \r
                                                        case (int)CStage選曲.E戻り値.コンフィグ呼び出し:\r
@@ -1493,14 +1431,14 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
 \r
                                                                this.tガベージコレクションを実行する();\r
                                                                break;\r
                                                        //-----------------------------\r
-                                                               #endregion\r
+                                                       #endregion\r
 \r
                                                        case (int)CStage選曲.E戻り値.スキン変更:\r
 \r
@@ -1513,7 +1451,7 @@ namespace DTXMania
                                                                r直前のステージ = r現在のステージ;\r
                                                                r現在のステージ = stageChangeSkin;\r
                                                                break;\r
-                                                       //-----------------------------\r
+                                                               //-----------------------------\r
                                                                #endregion\r
                                                }\r
                                                //-----------------------------\r
@@ -1523,10 +1461,10 @@ namespace DTXMania
                                        case CStage.Eステージ.曲読み込み:\r
                                                #region [ *** ]\r
                                                //-----------------------------\r
-                                               DTXVmode.Refreshed = false;             // 曲のリロード中に発生した再リロードは、無視する。\r
+                                               DTXVmode.Refreshed = false;     // 曲のリロード中に発生した再リロードは、無視する。\r
                                                if (this.n進行描画の戻り値 != 0)\r
                                                {\r
-                                                       CDTXMania.Instance.Pad.st検知したデバイス.Clear();      // 入力デバイスフラグクリア(2010.9.11)\r
+                                                       CDTXMania.Instance.Pad.st検知したデバイス.Clear();  // 入力デバイスフラグクリア(2010.9.11)\r
                                                        r現在のステージ.On非活性化();\r
                                                        #region [ ESC押下時は、曲の読み込みを中止して選曲画面に戻る ]\r
                                                        if (this.n進行描画の戻り値 == (int)E曲読込画面の戻り値.読込中止)\r
@@ -1543,7 +1481,7 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
                                                                break;\r
@@ -1558,7 +1496,7 @@ namespace DTXMania
                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                        {\r
                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                               pg.plugin.Onステージ変更();\r
                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                        }\r
 \r
@@ -1635,14 +1573,19 @@ namespace DTXMania
                                                                if (DTXVmode.NeedReload)\r
                                                                {\r
                                                                        CDTXMania.Instance.stage演奏画面.t再読込();\r
-\r
-                                                                       CDTXMania.Instance.ConfigIni.bDrums有効 = !DTXVmode.GRmode;\r
-                                                                       CDTXMania.Instance.ConfigIni.bGuitar有効 = true;\r
-                                                                       CDTXMania.Instance.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;\r
+                                                                       if (DTXVmode.GRmode)\r
+                                                                       {\r
+                                                                               CDTXMania.Instance.ConfigIni.eActiveInst.Value = EActiveInstrument.GBOnly;\r
+                                                                       }\r
+                                                                       else\r
+                                                                       {\r
+                                                                               CDTXMania.Instance.ConfigIni.eActiveInst.Value = EActiveInstrument.Both;\r
+                                                                       }\r
+                                                                       CDTXMania.Instance.ConfigIni.bTimeStretch.Value = DTXVmode.TimeStretch;\r
                                                                        CSound管理.bIsTimeStretch = DTXVmode.TimeStretch;\r
-                                                                       if (CDTXMania.Instance.ConfigIni.b垂直帰線待ちを行う != DTXVmode.VSyncWait)\r
+                                                                       if (CDTXMania.Instance.ConfigIni.bVSyncWait != DTXVmode.VSyncWait)\r
                                                                        {\r
-                                                                               CDTXMania.Instance.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;\r
+                                                                               CDTXMania.Instance.ConfigIni.bVSyncWait.Value = DTXVmode.VSyncWait;\r
                                                                                CDTXMania.Instance.b次のタイミングで垂直帰線同期切り替えを行う = true;\r
                                                                        }\r
                                                                }\r
@@ -1666,7 +1609,7 @@ namespace DTXMania
                                                                r現在のステージ = stage曲読み込み;\r
                                                                this.tガベージコレクションを実行する();\r
                                                                break;\r
-                                                               #endregion\r
+                                                       #endregion\r
 \r
                                                        //case (int) E演奏画面の戻り値.再演奏:\r
                                                        #region [ 再読み込み無しで、再演奏 ]\r
@@ -1680,7 +1623,7 @@ namespace DTXMania
                                                                #region [ 演奏キャンセル ]\r
                                                                //-----------------------------\r
                                                                scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新("Play canceled");\r
-                                                               if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)          // #35417 2015.8.18 yyagi Gt/Bsを入れ替えていたなら、演奏設定を元に戻す\r
+                                                               if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)      // #35417 2015.8.18 yyagi Gt/Bsを入れ替えていたなら、演奏設定を元に戻す\r
                                                                {\r
                                                                        //CDTXMania.Instance.DTX.SwapGuitarBassInfos();                                         // 譜面情報も元に戻す (現在は再演奏機能なしのため、元に戻す必要はない)\r
                                                                }\r
@@ -1743,7 +1686,7 @@ namespace DTXMania
                                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                                        {\r
                                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                               pg.plugin.Onステージ変更();\r
                                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                        }\r
                                                                        //---------------------\r
@@ -1753,7 +1696,7 @@ namespace DTXMania
                                                                }\r
                                                                break;\r
                                                        //-----------------------------\r
-                                                               #endregion\r
+                                                       #endregion\r
 \r
                                                        case (int)E演奏画面の戻り値.ステージ失敗:\r
                                                                #region [ 演奏失敗(StageFailed) ]\r
@@ -1791,7 +1734,7 @@ namespace DTXMania
                                                                        foreach (STPlugin pg in this.listプラグイン)\r
                                                                        {\r
                                                                                Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                               pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                               pg.plugin.Onステージ変更();\r
                                                                                Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                        }\r
                                                                        //---------------------\r
@@ -1801,20 +1744,17 @@ namespace DTXMania
                                                                }\r
                                                                break;\r
                                                        //-----------------------------\r
-                                                               #endregion\r
+                                                       #endregion\r
 \r
                                                        case (int)E演奏画面の戻り値.ステージクリア:\r
                                                                #region [ 演奏クリア ]\r
                                                                //-----------------------------\r
-                                                               STDGBVALUE<CScoreIni.C演奏記録> record;\r
-                                                               CChip[] chipArray = new CChip[10];\r
-\r
-                                                               chipArray = stage演奏画面.GetNoChipDrums();\r
+                                                               STDGBSValue<CScoreIni.C演奏記録> record;\r
                                                                record = stage演奏画面.Record;\r
 \r
                                                                double playskill = 0.0;\r
 \r
-                                                               for (E楽器パート inst = E楽器パート.DRUMS; inst <= E楽器パート.BASS; ++inst)\r
+                                                               for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
                                                                {\r
                                                                        if (!record[inst].b全AUTOである && record[inst].n全チップ数 > 0)\r
                                                                        {\r
@@ -1853,7 +1793,7 @@ namespace DTXMania
                                                                                str = string.Format("Cleared (E: {0:F2})", playskill);\r
                                                                                break;\r
 \r
-                                                                       case CScoreIni.ERANK.UNKNOWN:   // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき\r
+                                                                       case CScoreIni.ERANK.UNKNOWN:   // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき\r
                                                                                str = "Cleared (No chips)";\r
                                                                                break;\r
                                                                }\r
@@ -1875,7 +1815,7 @@ namespace DTXMania
                                                                Trace.TraceInformation("----------------------");\r
                                                                Trace.TraceInformation("■ 結果");\r
                                                                stage結果.st演奏記録 = record;\r
-                                                               stage結果.r空うちドラムチップ = chipArray;\r
+                                                               stage結果.r空うちドラムチップ = stage演奏画面.GetNoChipDrums();\r
                                                                stage結果.On活性化();\r
                                                                r直前のステージ = r現在のステージ;\r
                                                                r現在のステージ = stage結果;\r
@@ -1885,14 +1825,14 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
                                                                //---------------------\r
                                                                #endregion\r
 \r
                                                                break;\r
-                                                       //-----------------------------\r
+                                                               //-----------------------------\r
                                                                #endregion\r
                                                }\r
                                                //-----------------------------\r
@@ -1906,9 +1846,9 @@ namespace DTXMania
                                                {\r
                                                        // #35417 2015.08.30 chnmr0 changed : ステージクリア処理で入れ替えるため元に戻した\r
                                                        // #35417 2015.8.18 yyagi: AUTO系のフラグ入れ替えは削除可能!?。以後AUTOフラグに全くアクセスしておらず、意味がないため。\r
-                                                       if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)          // #24415 2011.2.27 yyagi Gt/Bsを入れ替えていたなら、Auto状態をリザルト画面終了後に元に戻す\r
+                                                       if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass)      // #24415 2011.2.27 yyagi Gt/Bsを入れ替えていたなら、Auto状態をリザルト画面終了後に元に戻す\r
                                                        {\r
-                                                               CDTXMania.Instance.ConfigIni.SwapGuitarBassInfos_AutoFlags();   // Auto入れ替え\r
+                                                               CDTXMania.Instance.ConfigIni.SwapGuitarBassInfos_AutoFlags();   // Auto入れ替え\r
                                                        }\r
 \r
                                                        DTX.t全チップの再生一時停止();\r
@@ -1925,7 +1865,7 @@ namespace DTXMania
                                                                foreach (STPlugin pg in this.listプラグイン)\r
                                                                {\r
                                                                        Directory.SetCurrentDirectory(pg.strプラグインフォルダ);\r
-                                                                       pg.plugin.Onステージ変更(CDTXMania.Instance.ConfigIni);\r
+                                                                       pg.plugin.Onステージ変更();\r
                                                                        Directory.SetCurrentDirectory(CDTXMania.Instance.strEXEのあるフォルダ);\r
                                                                }\r
 \r
@@ -1973,11 +1913,11 @@ namespace DTXMania
                        // Present()は game.csのOnFrameEnd()に登録された、GraphicsDeviceManager.game_FrameEnd() 内で実行されるので不要\r
                        // (つまり、Present()は、Draw()完了後に実行される)\r
 #if !GPUFlushAfterPresent\r
-                       actFlushGPU.On進行描画();           // Flush GPU    // EndScene()~Present()間 (つまりVSync前) でFlush実行\r
+                       actFlushGPU.On進行描画();       // Flush GPU        // EndScene()~Present()間 (つまりVSync前) でFlush実行\r
 #endif\r
                        if (Sound管理.GetCurrentSoundDeviceType() != "DirectSound")\r
                        {\r
-                               Sound管理.t再生中の処理をする();     // サウンドバッファの更新; 画面描画と同期させることで、スクロールをスムーズにする\r
+                               Sound管理.t再生中の処理をする();   // サウンドバッファの更新; 画面描画と同期させることで、スクロールをスムーズにする\r
                        }\r
 \r
                        #region [ マウスカーソル消去制御 ]\r
@@ -1991,7 +1931,7 @@ namespace DTXMania
                        #region [ 全画面・ウインドウ切り替え ]\r
                        if (this.b次のタイミングで全画面_ウィンドウ切り替えを行う)\r
                        {\r
-                               ConfigIni.b全画面モード = !ConfigIni.b全画面モード;\r
+                               // ConfigIni.bFullScreen.Value = !ConfigIni.bFullScreen;\r
                                Instance.t全画面_ウィンドウモード切り替え();\r
                                this.b次のタイミングで全画面_ウィンドウ切り替えを行う = false;\r
                        }\r
@@ -1999,37 +1939,150 @@ namespace DTXMania
                        #region [ 垂直基線同期切り替え ]\r
                        if (this.b次のタイミングで垂直帰線同期切り替えを行う)\r
                        {\r
-                               bool bIsMaximized = this.Window.IsMaximized;                                                                                    // #23510 2010.11.3 yyagi: to backup current window mode before changing VSyncWait\r
-                               currentClientSize = this.Window.ClientSize;                                                                                             // #23510 2010.11.3 yyagi: to backup current window size before changing VSyncWait\r
+                               bool bIsMaximized = this.Window.IsMaximized;                                            // #23510 2010.11.3 yyagi: to backup current window mode before changing VSyncWait\r
+                               currentClientSize = this.Window.ClientSize;                                             // #23510 2010.11.3 yyagi: to backup current window size before changing VSyncWait\r
                                DeviceSettings currentSettings = Instance.GraphicsDeviceManager.CurrentSettings;\r
-                               currentSettings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
+                               currentSettings.EnableVSync = ConfigIni.bVSyncWait;\r
                                Instance.GraphicsDeviceManager.ChangeDevice(currentSettings);\r
                                this.b次のタイミングで垂直帰線同期切り替えを行う = false;\r
-                               base.Window.ClientSize = new Size(currentClientSize.Width, currentClientSize.Height);   // #23510 2010.11.3 yyagi: to resume window size after changing VSyncWait\r
+                               base.Window.ClientSize = new Size(currentClientSize.Width, currentClientSize.Height);   // #23510 2010.11.3 yyagi: to resume window size after changing VSyncWait\r
                                if (bIsMaximized)\r
                                {\r
-                                       this.Window.WindowState = FormWindowState.Maximized;                                                            // #23510 2010.11.3 yyagi: to resume window mode after changing VSyncWait\r
+                                       this.Window.WindowState = FormWindowState.Maximized;                                // #23510 2010.11.3 yyagi: to resume window mode after changing VSyncWait\r
+                               }\r
+                       }\r
+                       #endregion\r
+\r
+                       //GC.Collect( 0, GCCollectionMode.Optimized, false );           // Rel105で処理が重くなっていることに対する、暫定処置。\r
+                                                                                                                                       // 重くなっている原因に対する適切な処置をして、処理が104程度に軽くなったら、\r
+                                                                                                                                       // この暫定処置は削除します。\r
+               }\r
+\r
+               /// <summary>\r
+               /// XML ファイルからオブジェクトを生成します。\r
+               /// </summary>\r
+               /// <param name="xmlfile">オブジェクトが記述される XML のパス。これは DataContract によってシリアライズされていなければなりません。</param>\r
+               /// <returns>生成したオブジェクト。正しく生成できなかった場合 null 。</returns>\r
+               public static object DeserializeXML(string xmlpath, Type t)\r
+               {\r
+                       object ret = null;\r
+                       try\r
+                       {\r
+                               if (File.Exists(xmlpath))\r
+                               {\r
+                                       using (XmlReader xr = XmlReader.Create(xmlpath))\r
+                                       {\r
+                                               DataContractSerializer serializer = new DataContractSerializer(t);\r
+                                               ret = serializer.ReadObject(xr);\r
+                                       }\r
                                }\r
                        }\r
+                       catch (Exception e)\r
+                       {\r
+                               Trace.TraceWarning( e.Message );\r
+                               ret = null;\r
+                       }\r
+                       return ret;\r
+               }\r
+\r
+               /// <summary>\r
+               /// オブジェクトから XML ファイルを生成します。\r
+               /// </summary>\r
+               /// <param name="xmlfile">XML ファイルのパス。</param>\r
+               /// <param name="obj">XML としてシリアライズするオブジェクト。DataContract 属性を持つクラスからインスタンス化されたオブジェクトです。</param>\r
+               public static void SerializeXML(string xmlpath, object obj)\r
+               {\r
+                       XmlWriterSettings settings = new XmlWriterSettings();\r
+                       settings.IndentChars = "  ";\r
+                       settings.Indent = true;\r
+                       settings.NewLineChars = Environment.NewLine;\r
+                       settings.Encoding = new System.Text.UTF8Encoding(false);\r
+                       using ( XmlWriter xw = XmlWriter.Create( new FileStreamSSD( xmlpath ), settings ) )\r
+                       {\r
+                               DataContractSerializer serializer = new DataContractSerializer(obj.GetType());\r
+                               serializer.WriteObject(xw, obj);\r
+                       }\r
+               }\r
+\r
+               public void SaveConfig()\r
+               {\r
+                       #region [ Skinパスの絶対パス→相対パス変換 ]\r
+                       string _strSystemSkinSubfolderPath = ConfigIni.strSystemSkinSubfolderPath.Value;\r
+                       Uri uriRoot = new Uri( System.IO.Path.Combine( this.strEXEのあるフォルダ, "System" + System.IO.Path.DirectorySeparatorChar ) );\r
+                       if ( ConfigIni.strSystemSkinSubfolderPath.Value != null && ConfigIni.strSystemSkinSubfolderPath.Value.Length == 0 )\r
+                       {\r
+                               // Config.iniが空の状態でDTXManiaをViewerとして起動・終了すると、strSystemSkinSubfolderFullName が空の状態でここに来る。\r
+                               // → 初期値として Default/ を設定する。\r
+                               ConfigIni.strSystemSkinSubfolderPath.Value = System.IO.Path.Combine( this.strEXEのあるフォルダ, "System" + System.IO.Path.DirectorySeparatorChar + "Default" + System.IO.Path.DirectorySeparatorChar );\r
+                       }\r
+\r
+                       // 起動直後は(Loadの前にSaveを通るため)Skinパスには初期値の相対パスが入っている場合がある。\r
+                       // そのため、以下の処理を通すために、いったん絶対パスに変換\r
+                       if ( !System.IO.Path.IsPathRooted( ConfigIni.strSystemSkinSubfolderPath.Value ) )\r
+                       {\r
+                               ConfigIni.strSystemSkinSubfolderPath.Value =\r
+                                       Path.Combine( Path.Combine( this.strEXEのあるフォルダ, "System" ), ConfigIni.strSystemSkinSubfolderPath );\r
+                       }\r
+\r
+                       Uri uriPath = new Uri( System.IO.Path.Combine( ConfigIni.strSystemSkinSubfolderPath.Value, "." + System.IO.Path.DirectorySeparatorChar ) );\r
+                       string relPath = uriRoot.MakeRelativeUri( uriPath ).ToString();                         // 相対パスを取得\r
+                       relPath = System.Web.HttpUtility.UrlDecode( relPath );                                          // デコードする\r
+                       relPath = relPath.Replace( '/', System.IO.Path.DirectorySeparatorChar );        // 区切り文字が\ではなく/なので置換する\r
+                       ConfigIni.strSystemSkinSubfolderPath.Value = relPath;\r
                        #endregion\r
+                       ConfigIni.strDTXManiaVersion.Value = CDTXMania.VERSION;\r
+\r
+                       CDTXMania.SerializeXML( strEXEのあるフォルダ + "Config.xml", ConfigIni );\r
+\r
+                       // 元の絶対パスに戻す\r
+                       ConfigIni.strSystemSkinSubfolderPath.Value = _strSystemSkinSubfolderPath;\r
                }\r
 \r
-               // その他\r
+               public void LoadConfig()\r
+               {\r
+                       string path = strEXEのあるフォルダ + "Config.xml";\r
 \r
+                       if (!File.Exists(path))\r
+                       {\r
+                               SaveConfig();\r
+                       }\r
+                       if (File.Exists(path))\r
+                       {\r
+                               ConfigIni = (CConfigXml)CDTXMania.DeserializeXML(path, typeof(CConfigXml));\r
+                               if (ConfigIni == null)\r
+                               {\r
+                                       ConfigIni = new CConfigXml();\r
+                                       SaveConfig();\r
+                               }\r
+                               // Skinパスの相対パスを、絶対パスに変換\r
+                               if ( !System.IO.Path.IsPathRooted( ConfigIni.strSystemSkinSubfolderPath.Value ) )\r
+                               {\r
+                                       ConfigIni.strSystemSkinSubfolderPath.Value =\r
+                                               Path.Combine( Path.Combine( this.strEXEのあるフォルダ, "System" ), ConfigIni.strSystemSkinSubfolderPath );\r
+                               }\r
+                       }\r
+               }\r
                /// <summary>\r
                /// 座標値を読み込む。Coordinates メンバ初期化後いつ呼び出しても構わない。\r
                /// </summary>\r
                public void UpdateCoordinates()\r
                {\r
                        string coordXml = strEXEのあるフォルダ + "Coordinates.xml";\r
-\r
\r
                        // デシリアライズ\r
                        if (File.Exists(coordXml))\r
                        {\r
                                using (XmlReader xr = XmlReader.Create(coordXml))\r
                                {\r
-                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates));\r
-                                       //Coordinates = (DisplayXML)serializer.ReadObject(xr);\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       try\r
+                                       {\r
+                                               Coordinates = (Coordinates.CCoordinates) serializer.ReadObject( xr );\r
+                                       }\r
+                                       catch (SerializationException e)\r
+                                       {\r
+                                               Trace.TraceWarning( "Rel107以前の古いフォーマットのCoordinates.xmlが読み込まれました。無視します。\n" + e.Message );\r
+                                       }\r
                                }\r
                        }\r
                        // シリアライズ\r
@@ -2037,23 +2090,94 @@ namespace DTXMania
                        settings.IndentChars = "  ";\r
                        settings.Indent = true;\r
                        settings.NewLineChars = Environment.NewLine;\r
-                       settings.Encoding = new System.Text.UTF8Encoding(false);\r
-                       using (XmlWriter xw = XmlWriter.Create(coordXml, settings))\r
+                       settings.Encoding = new System.Text.UTF8Encoding( false );\r
+                       using ( XmlWriter xw = XmlTextWriter.Create( coordXml, settings ) )\r
                        {\r
-                               DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates));\r
-                               serializer.WriteObject(xw, Coordinates);\r
+                               //XmlSerializerNamespaces ns = new XmlSerializerNamespaces();\r
+                               //ns.Add( String.Empty, String.Empty );\r
+\r
+                               //StreamWriter sw = new StreamWriter( "test2.xml", false, Encoding.UTF8 );\r
+                               //serializer.Serialize( sw, item, ns );\r
+                               //sw.Close\r
+\r
+                               DataContractSerializer serializer = new DataContractSerializer( typeof( Coordinates.CCoordinates ) );\r
+                               serializer.WriteObject( xw, Coordinates );\r
+                               //serializer.WriteStartObject( xw, Coordinates );\r
+                               //xw.WriteAttributeString( "xmlns", "d1p1", "http://www.w3.org/2000/xmlns/",\r
+                               //      "http://schemas.microsoft.com/2003/10/Serialization/" );\r
+                               //serializer.WriteObjectContent( xw, Coordinates );\r
+                               //serializer.WriteEndObject( xw );\r
                        }\r
+\r
                        // もう一度デシリアライズ\r
                        if (File.Exists(coordXml))\r
                        {\r
                                using (XmlReader xr = XmlReader.Create(coordXml))\r
                                {\r
-                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates));\r
-                                       Coordinates = (Coordinates)serializer.ReadObject(xr);\r
+                                       DataContractSerializer serializer = new DataContractSerializer(typeof(Coordinates.CCoordinates));\r
+                                       Coordinates = (Coordinates.CCoordinates)serializer.ReadObject(xr);\r
                                }\r
                        }\r
                }\r
 \r
+\r
+               /// <summary>\r
+               /// 保存するxmlからnamespaceを削除するためのXmlTextWriter\r
+               /// </summary>\r
+               //public class MyXmlTextWriter : XmlTextWriter\r
+               //{\r
+               //      private bool _ignoreAttr = false;\r
+\r
+               //      public MyXmlTextWriter( TextWriter w  )\r
+               //              : base( w )\r
+               //      {\r
+               //              Debug.WriteLine( "create" );\r
+               //      }\r
+\r
+               //      public override string LookupPrefix( string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "luprefix" );\r
+               //              return string.Empty;\r
+               //      }\r
+\r
+               //      public override void WriteStartAttribute( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "writestartattribute" );\r
+               //              if ( String.Compare( prefix, "xmlns", true ) == 0 )\r
+               //              {\r
+               //                      Debug.WriteLine( "[!]" );\r
+               //                      this._ignoreAttr = true;\r
+               //                      return;\r
+               //              }\r
+               //      }\r
+\r
+               //      public override void WriteEndAttribute()\r
+               //      {\r
+               //              if ( this._ignoreAttr )\r
+               //              {\r
+               //                      this._ignoreAttr = false;\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteEndAttribute();\r
+               //      }\r
+\r
+               //      public override void WriteString( string text )\r
+               //      {\r
+               //              Debug.WriteLine( "ws" );\r
+               //              if ( String.Compare( text, "http://www.w3.org/2001/XMLSchema-instance", true ) == 0 )\r
+               //              {\r
+               //                      return;\r
+               //              }\r
+               //              base.WriteString( text );\r
+               //      }\r
+\r
+               //      public override void WriteStartElement( string prefix, string localName, string ns )\r
+               //      {\r
+               //              Debug.WriteLine( "wse" );\r
+               //              base.WriteStartElement( null, localName, null );\r
+               //      }\r
+               //}\r
+\r
                public void ShowWindowTitleWithSoundType()\r
                {\r
                        string delay = "";\r
@@ -2078,7 +2202,7 @@ namespace DTXMania
                        {\r
                                if (DTXVmode.Enabled)\r
                                {\r
-                                       return "DTXViewer release " + VERSION;\r
+                                       return "DTXMViewer release " + VERSION;\r
                                }\r
                                else\r
                                {\r
@@ -2121,7 +2245,7 @@ namespace DTXMania
                                #endregion\r
                                #region [ 現在のステージの終了処理 ]\r
                                //---------------------\r
-                               if (CDTXMania.Instance.r現在のステージ != null && CDTXMania.Instance.r現在のステージ.b活性化してる)         // #25398 2011.06.07 MODIFY FROM\r
+                               if (CDTXMania.Instance.r現在のステージ != null && CDTXMania.Instance.r現在のステージ.b活性化してる)     // #25398 2011.06.07 MODIFY FROM\r
                                {\r
                                        Trace.TraceInformation("現在のステージを終了します。");\r
                                        Trace.Indent();\r
@@ -2137,6 +2261,11 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
+\r
+                               #region [ 選曲ステージの終了処理 ]\r
+                               stage選曲.On非活性化();\r
+                               #endregion\r
+\r
                                #region [ プラグインの終了処理 ]\r
                                //---------------------\r
                                if (this.listプラグイン != null && this.listプラグイン.Count > 0)\r
@@ -2349,35 +2478,37 @@ namespace DTXMania
                                #endregion\r
                                #region [ Config.iniの出力 ]\r
                                //---------------------\r
-                               Trace.TraceInformation("Config.ini を出力します。");\r
+                               Trace.TraceInformation("Config.xml を出力します。");\r
                                //                              if ( ConfigIni.bIsSwappedGuitarBass )                   // #24063 2011.1.16 yyagi ギターベースがスワップしているときは元に戻す\r
-                               if (ConfigIni.bIsSwappedGuitarBass_AutoFlagsAreSwapped) // #24415 2011.2.21 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、AUTOのフラグをswapして戻す\r
+                               if (ConfigIni.bIsSwappedGuitarBass_AutoFlagsAreSwapped) // #24415 2011.2.21 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、AUTOのフラグをswapして戻す\r
                                {\r
                                        ConfigIni.SwapGuitarBassInfos_AutoFlags();\r
                                }\r
-                               if (ConfigIni.bIsSwappedGuitarBass_PlaySettingsAreSwapped)      // #35417 2015/8/18 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、演奏設定のフラグをswapして戻す\r
-                               {\r
-                                       ConfigIni.SwapGuitarBassInfos_PlaySettings();\r
-                               }\r
-                               string str = strEXEのあるフォルダ + "Config.ini";\r
+                               /*\r
+                                       if (ConfigIni.bIsSwappedGuitarBass_PlaySettingsAreSwapped)  // #35417 2015/8/18 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、演奏設定のフラグをswapして戻す\r
+                                       {\r
+                                                       ConfigIni.SwapGuitarBassInfos_PlaySettings();\r
+                                       }\r
+                                */\r
+                               string str = strEXEのあるフォルダ + "Config.xml";\r
                                Trace.Indent();\r
                                try\r
                                {\r
                                        if (DTXVmode.Enabled)\r
                                        {\r
                                                DTXVmode.tUpdateConfigIni();\r
-                                               Trace.TraceInformation("DTXVモードの設定情報を、Config.iniに保存しました。");\r
+                                               Trace.TraceInformation("DTXVモードの設定情報を、Config.xmlに保存しました。");\r
                                        }\r
                                        else\r
                                        {\r
-                                               ConfigIni.t書き出し(str);\r
+                                               CDTXMania.Instance.SaveConfig();\r
                                                Trace.TraceInformation("保存しました。({0})", str);\r
                                        }\r
                                }\r
                                catch (Exception e)\r
                                {\r
                                        Trace.TraceError(e.Message);\r
-                                       Trace.TraceError("Config.ini の出力に失敗しました。({0})", str);\r
+                                       Trace.TraceError("Config.xml の出力に失敗しました。({0})", str);\r
                                }\r
                                finally\r
                                {\r
@@ -2407,7 +2538,12 @@ namespace DTXMania
                                }\r
                                //---------------------\r
                                #endregion\r
-                               Trace.TraceInformation("アプリケーションの終了処理を完了しました。");\r
+                               #region [ DirectXの終了処理 ]\r
+                               //---------------------\r
+                               base.GraphicsDeviceManager.Dispose();\r
+                               //---------------------\r
+                               #endregion\r
+                               Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );\r
 \r
 \r
                                this.b終了処理完了済み = true;\r
@@ -2415,7 +2551,7 @@ namespace DTXMania
                }\r
                private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新(string str新ヒストリ行)\r
                {\r
-                       STDGBVALUE<bool> isUpdated = new STDGBVALUE<bool>();\r
+                       STDGBSValue<bool> isUpdated = new STDGBSValue<bool>();\r
                        string strFilename = DTX.strファイル名の絶対パス + ".score.ini";\r
                        CScoreIni ini = new CScoreIni(strFilename);\r
                        if (!File.Exists(strFilename))\r
@@ -2423,18 +2559,18 @@ namespace DTXMania
                                ini.stファイル.Title = DTX.TITLE;\r
                                ini.stファイル.Name = DTX.strファイル名;\r
                                ini.stファイル.Hash = CScoreIni.tファイルのMD5を求めて返す(DTX.strファイル名の絶対パス);\r
-                               for ( E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; ++i)\r
+                               for (EPart i = EPart.Drums; i <= EPart.Bass; ++i)\r
                                {\r
                                        ini.stセクション.HiScore[i].nPerfectになる範囲ms = nPerfect範囲ms;\r
                                        ini.stセクション.HiScore[i].nGreatになる範囲ms = nGreat範囲ms;\r
                                        ini.stセクション.HiScore[i].nGoodになる範囲ms = nGood範囲ms;\r
                                        ini.stセクション.HiScore[i].nPoorになる範囲ms = nPoor範囲ms;\r
-                                       \r
+\r
                                        ini.stセクション.HiSkill[i].nPerfectになる範囲ms = nPerfect範囲ms;\r
                                        ini.stセクション.HiSkill[i].nGreatになる範囲ms = nGreat範囲ms;\r
                                        ini.stセクション.HiSkill[i].nGoodになる範囲ms = nGood範囲ms;\r
                                        ini.stセクション.HiSkill[i].nPoorになる範囲ms = nPoor範囲ms;\r
-                                       \r
+\r
                                        ini.stセクション.LastPlay[i].nPerfectになる範囲ms = nPerfect範囲ms;\r
                                        ini.stセクション.LastPlay[i].nGreatになる範囲ms = nGreat範囲ms;\r
                                        ini.stセクション.LastPlay[i].nGoodになる範囲ms = nGood範囲ms;\r
@@ -2443,7 +2579,7 @@ namespace DTXMania
                        }\r
                        ini.stファイル.BGMAdjust = DTX.nBGMAdjust;\r
                        isUpdated = CScoreIni.t更新条件を取得する();\r
-                       if ( isUpdated.Drums || isUpdated.Guitar || isUpdated.Bass )\r
+                       if (isUpdated.Drums || isUpdated.Guitar || isUpdated.Bass)\r
                        {\r
                                if (isUpdated.Drums)\r
                                {\r
@@ -2469,7 +2605,7 @@ namespace DTXMania
                                        }\r
                                }\r
                        }\r
-                       if (ConfigIni.bScoreIniを出力する)\r
+                       if (ConfigIni.bScoreIni)\r
                        {\r
                                ini.t書き出し(strFilename);\r
                        }\r
@@ -2478,9 +2614,9 @@ namespace DTXMania
                }\r
                private void tガベージコレクションを実行する()\r
                {\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Optimized, true );\r
                        GC.WaitForPendingFinalizers();\r
-                       GC.Collect();\r
+                       GC.Collect(0, GCCollectionMode.Forced, true );\r
                        GC.WaitForPendingFinalizers();\r
                }\r
                private void tプラグイン検索と生成()\r
@@ -2495,7 +2631,6 @@ namespace DTXMania
                        if (this.listプラグイン.Count > 0)\r
                                Trace.TraceInformation(this.listプラグイン.Count + " 個のプラグインを読み込みました。");\r
                }\r
-               #region [ Windowイベント処理 ]\r
 \r
                private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)\r
                {\r
@@ -2524,6 +2659,10 @@ namespace DTXMania
                        string[] strDLLs = System.IO.Directory.GetFiles(strプラグインフォルダパス, "*.dll");\r
                        foreach (string dllName in strDLLs)\r
                        {\r
+                               if (Path.GetExtension(dllName).ToLower() != "dll")\r
+                               {\r
+                                       continue;\r
+                               }\r
                                try\r
                                {\r
                                        // (1-1) dll をアセンブリとして読み込む。\r
@@ -2590,7 +2729,8 @@ namespace DTXMania
                                this.t指定フォルダ内でのプラグイン検索と生成(dir + "\\", strプラグイン型名);\r
                }\r
                //-----------------\r
-               private void Window_ApplicationActivated(object sender, EventArgs e)\r
+               #region [ Windowイベント処理 ]\r
+               private void Window_ApplicationActivated( object sender, EventArgs e )\r
                {\r
                        this.bApplicationActive = true;\r
                }\r
@@ -2617,16 +2757,19 @@ namespace DTXMania
                        }\r
                        else\r
                        {\r
-                               for (int i = 0; i < 0x10; i++)\r
+                               for (int i = 0; i < CConfigXml.AssignableCodes; i++)\r
                                {\r
-                                       if (ConfigIni.KeyAssign.System.Capture[i].コード > 0 &&\r
-                                                e.KeyCode == DeviceConstantConverter.KeyToKeyCode((SlimDX.DirectInput.Key)ConfigIni.KeyAssign.System.Capture[i].コード))\r
+                                       var captureCode = (SlimDX.DirectInput.Key) ConfigIni.KeyAssign[ EPad.Capture ][ i ].コード;\r
+\r
+                                       if( (int) captureCode > 0 &&\r
+                                               DeviceConstantConverter.KeyToKeys.ContainsKey( captureCode ) &&\r
+                                               e.KeyCode == DeviceConstantConverter.KeyToKeys[ captureCode ] )\r
                                        {\r
                                                // Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );\r
                                                string strFullPath =\r
-                                                        Path.Combine(CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img");\r
-                                               strFullPath = Path.Combine(strFullPath, DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");\r
-                                               SaveResultScreen(strFullPath);\r
+                                                                Path.Combine( CDTXMania.Instance.strEXEのあるフォルダ, "Capture_img" );\r
+                                               strFullPath = Path.Combine( strFullPath, DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".png" );\r
+                                               SaveResultScreen( strFullPath );\r
                                        }\r
                                }\r
                        }\r
@@ -2636,9 +2779,9 @@ namespace DTXMania
                        mb = e.Button;\r
                }\r
 \r
-               private void Window_MouseDoubleClick(object sender, MouseEventArgs e)   // #23510 2010.11.13 yyagi: to go full screen mode\r
+               private void Window_MouseDoubleClick(object sender, MouseEventArgs e)   // #23510 2010.11.13 yyagi: to go full screen mode\r
                {\r
-                       if (mb.Equals(MouseButtons.Left) && ConfigIni.bIsAllowedDoubleClickFullscreen)  // #26752 2011.11.27 yyagi\r
+                       if (mb.Equals(MouseButtons.Left) && ConfigIni.bIsAllowedDoubleClickFullscreen)  // #26752 2011.11.27 yyagi\r
                        {\r
                                ConfigIni.bウィンドウモード = false;\r
                                this.t全画面_ウィンドウモード切り替え();\r
@@ -2646,7 +2789,7 @@ namespace DTXMania
                }\r
                private void Window_MouseMove(object sender, MouseEventArgs e)\r
                {\r
-                       if (this.bマウスカーソル表示中 == false)\r
+                       if (ConfigIni.bウィンドウモード == true && this.bマウスカーソル表示中 == false)   // #36168 2016.3.19 yyagi: do not to show mouse cursor in full screen mode\r
                        {\r
                                Cursor.Show();\r
                                this.bマウスカーソル表示中 = true;\r
@@ -2654,16 +2797,16 @@ namespace DTXMania
                        ccMouseShow.t開始(0, 1, 2000, Timer);\r
                }\r
 \r
-               private void Window_ResizeEnd(object sender, EventArgs e)                               // #23510 2010.11.20 yyagi: to get resized window size\r
+               private void Window_ResizeEnd(object sender, EventArgs e)               // #23510 2010.11.20 yyagi: to get resized window size\r
                {\r
                        if (ConfigIni.bウィンドウモード)\r
                        {\r
-                               ConfigIni.n初期ウィンドウ開始位置X = base.Window.Location.X; // #30675 2013.02.04 ikanick add\r
-                               ConfigIni.n初期ウィンドウ開始位置Y = base.Window.Location.Y; //\r
+                               ConfigIni.rcWindow.X = base.Window.Location.X; // #30675 2013.02.04 ikanick add\r
+                               ConfigIni.rcWindow.Y = base.Window.Location.Y; //\r
                        }\r
 \r
-                       ConfigIni.nウインドウwidth = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Width : currentClientSize.Width;       // #23510 2010.10.31 yyagi add\r
-                       ConfigIni.nウインドウheight = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Height : currentClientSize.Height;\r
+                       ConfigIni.rcWindow.W = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Width : currentClientSize.Width;   // #23510 2010.10.31 yyagi add\r
+                       ConfigIni.rcWindow.H = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Height : currentClientSize.Height;\r
                }\r
                #endregion\r
 \r