/// <summary>
        /// デバイスの作成
        /// </summary>
        private void CrateDevice()
        {
            // デバイスコールバック内からこれを呼び出すことはできません
            if (DXState.InsideDeviceCallback)
            {
                throw new Exception("CreateDevice 既に作成済み");
            }

            DXState.DeviceObjectsCreated = true;

            if (IsCreate)
            {
                return;
            }
            DesignModeTitle = "デザインモード";

            SharpDX.Direct3D11.Device device;
            SwapChain swapChain;

            m_app.SetSwapChainDesc(new SwapChainDescription()
            {
                BufferCount       = 2,
                ModeDescription   = new ModeDescription(Width, Height, new Rational(60, 0), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            });
            // デバイスとスワップチェーンの作成
            SharpDX.Direct3D11.Device.CreateWithSwapChain(
                DriverType.Hardware,
                DeviceCreationFlags.BgraSupport,
                //DeviceCreationFlags.None,
                new[] { SharpDX.Direct3D.FeatureLevel.Level_11_0 },
                m_app.SwapChainDesc,
                out device,
                out swapChain
                );
            //SharpDX.Direct3D11.Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, m_app.SwapChainDesc, out device, out swapChain);

            // すべてのWindowsイベントを無視する
            m_app.SetFactory(swapChain.GetParent <SharpDX.DXGI.Factory>());
            m_app.Factory.MakeWindowAssociation(Handle, WindowAssociationFlags.IgnoreAll);

            m_app.SetDXDevice(device);
            m_app.SetImmediateContext(m_app.DXDevice.ImmediateContext);
            m_app.SetSwapChain(swapChain);

            ResizeDXGIBuffers(Width, Height);

            #region 管理の作成 & 初期化
            /////////////////////////////////////////////////////
            // イメージ
            m_app.SetImageMgr(new MCImageMgr(m_app));
            // ブレンドステート
            m_app.SetBlendStateMgr(new MCBlendStateMgr(m_app));
            // レイアウト
            m_app.SetLayoutMgr(new MCInputLayoutMgr(m_app));
            // メッシュ
            m_app.SetMeshMgr(new MCMeshMgr(m_app));
            // HLSL
            m_app.SetHLSLMgr(new DXHLSLMgr(m_app));
            // スプライト
            m_app.SetSpriteMgr(new MCSpriteMgr(m_app));
            // エフェクト
            m_app.SetBatchDrawingMgr(new MCBatchDrawingMgr(m_app));
            // カメラ
            m_app.SetCameraMgr(new MCCameraMgr(m_app));
            // ASCII
            m_app.SetAsciiStringDraw(new AsciiStringDraw(m_app));

            App = m_app;
            //---------------------------------------------------------------------
            IDrawingEffectGroup deg = null;
            if (EffectGroupID == DefaultDrawingEffectGroup.DrawingEffectGroupID)
            {
                deg = new DefaultDrawingEffectGroup(m_app);
                m_app.AsciiText.DefaultEffectID = (int)DrawingCommand.Default.DCRL.CONST_SPRITE;
            }
            if (EffectGroupID == SimpleDrawingEffectGroup.DrawingEffectGroupID)
            {
                deg = new SimpleDrawingEffectGroup(m_app);
                m_app.AsciiText.DefaultEffectID = (int)DrawingCommand.SimpleDC.DCRL.DEFAULT;
            }
            else
            {
                throw new Exception("存在しない EffectGroupID( " + EffectGroupID + " ) の設定");
            }
            /////////////////////////////////////////////////////
            // イメージ
            m_app.ImageMgr?.OnCreateDevice(m_app.DXDevice);
            // ブレンドステート
            m_app.BlendStateMgr?.OnCreateDevice(m_app.DXDevice);
            // レイアウト
            m_app.LayoutMgr?.OnCreateDevice(m_app.DXDevice);
            // メッシュ
            m_app.MeshMgr?.OnCreateDevice(m_app.DXDevice);
            // HLSL
            m_app.HLSLMgr?.OnCreateDevice(m_app.DXDevice);
            // スプライト
            m_app.SpriteMgr?.OnCreateDevice(m_app.DXDevice);
            // エフェクト
            m_app.BatchDrawingMgr?.SetDrawingEffectGroup(deg);
            m_app.BatchDrawingMgr?.OnCreateDevice(m_app.DXDevice);
            // カメラ
            m_app.CameraMgr?.OnCreateDevice(m_app.DXDevice);
            // ASCII
            m_app.AsciiText?.OnCreateDevice(m_app.DXDevice);
            #endregion

            // デバイス作成の呼び出し
            OnCrateDevice();
            IsCreate = true;
            DXState.DeviceCreated = true;
        }