0
 // handle alt+enter ourselves
        form.KeyDown += (o, e) =>
        {
            if (e.Alt && e.KeyCode == Keys.Enter) {
                bool Full;

                Output ThisOut;
                swapChain.GetFullScreenState(out Full, out ThisOut);

                if (Full == true)
                {

                    swapChain.SetFullScreenState(false, ThisOut);

                }
                else if (Full == false)
                {

                    swapChain.SetFullScreenState(true, ThisOut);

                }
            }
           //     swapChain.IsFullScreen = !swapChain.IsFullScreen;

SlimDx のチュートリアル ( http://slimdx.org/tutorials/devicecreation.php ) を使用していて、swapchain の IsFullScreen プロパティがないことに気付きました。したがって、利用可能な他の方法を使用しようとしたところ、問題が発生しました。- フルスクリーンに切り替えると、正常に動作します。しかし、非全画面表示に戻すと、移動できない空白のボックスしか表示されません。

何が起こっている?チュートリアルのように isFullScreen プロパティがないのはなぜですか。デバイスがどこかで紛失していませんか?

4

3 に答える 3

2

私はこのslimDXの世界(そしてstackoverflowに投稿)も初めてで、同じ問題に基づいてあなたの質問に出くわしました。これが VB であり、C# を使用していることは知っていますが、これで成功しました。元のウィンドウ モードの説明が必要になることに注意してください。

Private Sub Form_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.Alt And e.KeyCode = Keys.Enter Then
        Dim isFull As Boolean
        swapChain.GetFullScreenState(isFull, Nothing)
        swapChain.SetFullScreenState(Not isFull, Nothing)
        swapChain.ResizeTarget(swapChainDescription.ModeDescription)
    End If
End Sub

私は C# プログラマーではありませんが、私の見解は次のとおりです。

form.KeyDown += (o, e) =>
    {
        bool Full;
        swapChain.GetFullScreenState(out Full, Null);
        swapChain.SetFullScreenState(!Full, Null);
        swapChain.ResizeTarget(swapChainDescription.ModeDescription);
    }

私が間違っているか、あなたが助けてくれるなら、誰かが来て私を訂正してくれることを願っています.

基本的に、私がこれを正しく理解していれば、すでに行っているモードの説明を探しているわけではありません。ThisOut を取得し、ThisOut を渡しました。ThisOut には、SetFullScreenState メソッドの性質に基づいてフルスクリーン フラグが含まれています。これは SlimDX ですが、実際にはすべて MS DX であるため、参照先は次のとおりです。

http://msdn.microsoft.com/en-us/library/bb174579%28v=vs.85%29.aspx

詳細については、記事内のリンクをたどってください。

全画面表示にしない場合は、Null を渡す必要があることに注意してください。Null 以外のものを渡しました...正確には既存のレンダー ターゲットです。既存のレンダー ターゲットがフルスクリーンに設定されました。関数が意図するように Null (または VB であるため Nothing) を渡すと、問題なく動作します。元のウィンドウ化された説明を取得し、ウィンドウ化されていてフルスクリーンではないモードを再度渡すことで、すべてが正常に機能します。

于 2011-01-29T21:16:41.063 に答える
0

そのチュートリアルのリンクで述べたように、まさにこの理由で IsFullScreen プロパティをライブラリに追加しましたが、現在はリポジトリにのみあります (公式リリースはまだありません)。

私たちはリリースを DirectX のリリース スケジュールに合わせていますが、次のリリースまでにこれほど時間がかかるとは想像もしていませんでした。以前は四半期に 1 回リリースしていましたが、2010 年 6 月以降はリリースされていません。

于 2011-02-04T17:11:17.660 に答える
0

だからここに私がしたことがあります:

if (e.Alt && e.KeyCode == Keys.Enter)
    {
        bool isFull = swapChain.Description.IsWindowed;
        swapChain.SetFullScreenState(isFull, null);
    }

それは私にとってはうまくいき、他の方法よりも少しきれいです.1行を削減して.IsWindowed行をSetFullScreenStateに入れることさえできます。

于 2011-03-08T07:06:20.697 に答える