Flashでフルスクリーンを実行すると、一つのPCに複数のモニタをつなげても、一つのモニタのみでのフルスクリーンになってしまいます。
複数のモニタ全体を使って表示する場合、IEのキオスクモードを使ったり、AIRを使ったりとかいろいろやり方はあります。しかしそれぞれ制約が出てきてしまうので、下手にやりくりするよりはVisualStudioのフォームアプリケーションを使うのが一番手っ取り早かったりします。
ここでは、その一例を紹介します。
以前紹介した、「C#のアプリにFlash(swf)を埋め込む。」の続きの作業になります。
Form1.csを次のように編集します。
手順の基本は次の三つ
1:フォームの境界(ウィンドウの枠)を消す
2:モニタサイズを取得し(複数の場合も対応)
3:swfを読み込む
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
using System; using System.Drawing; using System.Windows.Forms; using System.IO; namespace FullScreen { public partial class Form1 : Form { public Form1() { InitializeComponent(); // ◆フォームの境界(ウィンドウの枠)を消す // Windowsアプリケーションをフルスクリーンで表示するには? // http://www.atmarkit.co.jp/fdotnet/dotnettips/199fullscreen/fullscreen.html // 1. フォームの境界線スタイルを「None」にする this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // ◆モニタサイズを取得(複数の場合も対応) // モニタサイズ保持用の構造体を生成 Rectangle screenRectangle = new Rectangle(0, 0, 0, 0); // ディスプレイの解像度を取得するには? // http://www.atmarkit.co.jp/fdotnet/dotnettips/003screen/screen.html foreach (Screen s in Screen.AllScreens) { //Console.WriteLine(s.Bounds); screenRectangle.X = Math.Min(screenRectangle.X, s.Bounds.X); screenRectangle.Y = Math.Min(screenRectangle.Y, s.Bounds.Y); screenRectangle.Width = Math.Max(screenRectangle.Width, s.Bounds.Right); screenRectangle.Height = Math.Max(screenRectangle.Height, s.Bounds.Bottom); } //Console.WriteLine(screenRectangle); // ウィンドウとswfを配置するエリアの位置やサイズを指定 axShockwaveFlash1.Top = 0; axShockwaveFlash1.Left = 0; this.Top = screenRectangle.Top; this.Left = screenRectangle.Left; this.Width = axShockwaveFlash1.Width = screenRectangle.Width - screenRectangle.X; this.Height = axShockwaveFlash1.Height = screenRectangle.Height - screenRectangle.Y; // ◆SWFを読み込む // http://memo.sappari.org/flash-in-csharp // 読み込むswfパスの初期値。実行ファイル(exe)と同階層のEmbedFlash.swfを指定。 String swfPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "EmbedFlash.swf"; // 実行ファイルにswfをドロップした場合はそのパスに上書き // 実行ファイルにドロップされたファイルのパスを取得する // http://dobon.net/vb/dotnet/programing/dropfiletoexe.html string[] cmds = System.Environment.GetCommandLineArgs(); if (cmds.Length > 1) { //ドロップされたファイルのパスをすべて表示 for (int i = 1; i < cmds.Length; i++) { // Console.WriteLine(cmds[i]); swfPath = cmds[i]; } } // wmodeの指定 axShockwaveFlash1.WMode = "Direct"; // swfのロード axShockwaveFlash1.LoadMovie(0, swfPath); // ◆マウス・カーソルを非表示にするには? // http://www.atmarkit.co.jp/fdotnet/dotnettips/390cursorhide/cursorhide.html //Cursor.Hide(); } } } |
ソース
一式
https://github.com/umhr/FullScreen/blob/master/FullScreen/FullScreen.zip?raw=true
github
https://github.com/umhr/FullScreen
参考
Windowsアプリケーションをフルスクリーンで表示するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/199fullscreen/fullscreen.html
ディスプレイの解像度を取得するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/003screen/screen.html
C#の中にFlashを埋め込む
http://memo.sappari.org/flash-in-csharp
実行ファイルにドロップされたファイルのパスを取得する
http://dobon.net/vb/dotnet/programing/dropfiletoexe.html
マウス・カーソルを非表示にするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/390cursorhide/cursorhide.html
1 Comment
[…] 複数モニタでフルスクリーン(C#) […]