2011-12-01 11 views
2

私はスタックオーバーフローを調べて、のほぼがこの問題を解決していますが、具体的には、3つまたは4つのディスプレイを持つ可能性のあるユーザーに展開されるアプリケーションを指しており、アプリケーションは起動時にどのディスプレイを表示するかを覚えておく必要があります。Wpfアプリケーション - どの画面をアプリケーションに保存してロードするのですか

私はWPFアプリケーションを持っており、フォームがOnCloseのときにどの画面を保存したいのですか?それがロードされたら、私はその画面に自分のアプリケーションを入れたいと思う。

これはどのように(ハックなWin32 API呼び出しなしで)行うことができますか?

編集:私はscreenを持っていたら、私が行うことができる唯一のことは、アプリケーションがプライマリ画面上かのどちらかであるかどうかをチェックしているようだ

var screen = System.Windows.Forms.Screen.FromRectangle(
    new System.Drawing.Rectangle(
    (int)myWindow.Left, (int)myWindow.Top, 
    (int)myWindow.Width, (int)myWindow.Height)); 

:前StackOで誰かを投稿するような何かをやって言及。どちらのユーザーが2つの画面しか持たないが、3つ以上の画面がある場合はうまくいかない私がこの結果のscreenオブジェクトでできることは、プライマリかどうかをチェックするよりも優れていますか?

+1

"hacky Win32 API呼び出し"と呼ばれることなく、現在の画面を取得する方法はないと思います。存在する可能性がある唯一の方法は、C#関数を実行する素敵なフレームワークを誰かが構築し、C#関数が背後で「ハッキーなWin32 API呼び出し」を行った場合です。ああ、待って、それは.NETフレームワークです:)。 – Alxandr

+1

App.xaml.csを使用すると、特定の画面に誘導することができます。私は他の記事を思い出して、WPFがメインの読み込みに抵抗しないように、あなたが隠すメインのメインが必要な場合があります。 – Paparazzi

答えて

2

メモリからまた

http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.allscreens.aspx

、私は思いますこれは複数のモニターで動作します。

+0

あなたは、左と上のウィンドウを保存するのが正しいです。奇妙なことは、私のマルチモニタディスプレイ(同じ解像度の2つのスクリーン)では、これはうまく動作し、どの画面を覚えているかです。しかし、解像度を変えて3つ目の画面に追加すると、すべてが途切れます。 – kmarks2

1

これまで、ViewManagerクラス、カスタムXML設定ファイル、MVVMを使ってこれを行いました。基本的に、OnCloseが呼び出されると、ViewManagerクラス(実際にカスタムViewInfoインスタンスのコレクションを保持していたカスタムクラス)がポーリングされて、現在開いているビューと順番を確認します(Ctrl +タブ)と、そのレコードのIDが表示されていた場所。このアプリケーションはEntity Frameworkを使用してデータベースデータにアクセスし、各アプリケーションビューはレコードのコレクションまたは特定のタイプの単一レコードにマッピングされていました。

XML出力には、ビューの名前、アプリケーション(内部でアプリケーションと呼ばれるいくつかの部分がアプリケーション内にあった)、ロードされたレコードに関する情報などが含まれます。

プログラムをロードすると、自動的に読み込まれる唯一のビューは、潜在的に他のすべてのビューを含むHomeViewです。 ViewManagerはXMLファイルをチェックし、その内容に基づいてビューをロードします。この操作は、オプション画面でオフにすることができます。その結果、ユーザーは、好きなときにクリーンな作業領域が入力されたときにその場所に表示されます。あなたのアプリをロードするとき、あなたは自分のウィンドウ左と上の位置を保存し、それらを復元する場合は、Screen.AllScreensプロパティから複数のモニタ上でより多くのINFOMATIONを得ることができます

+0

ありがとう、私はこれを試してみるつもりです。 – kmarks2

関連する問題