はじめに
セカンドディスプレイ(サブモニター)でフルスクリーンをする記事はいろんなところに腐るほどでてます。
ただ、その通りやってみてうまくいかずちょっと困ったので残しときます。
問題
メインモニターでUI画面、サブモニターで描画画面をフルスクリーンで出したいというのが目的でした。
そこでとりあえずぐぐって最初の方に出た以下の2つを参考にやってみました。
openFrameworksでマルチウィンドウ、マルチディスプレイの実装方法
openFrameworksで起動時にセカンドディスプレイでフルスクリーンにする方法
が、うまくいかない。
自身のメインモニターの解像度は1920*1080
なのでウィンドウ位置を1921, 0
に設定してフルスクリーン化すると、メインモニターでフルスクリーンになってしまう。
結論
上の記事でも書いてありますが、フルスクリーン化(ofToggleFullScreen()
とかofSetFullScreen(true)
とか)はそのウィンドウが存在するモニターでフルスクリーン化します。
また、例えば2画面の場合、そのどちらにも属さない状態でフルスクリーン化しようとするとメインモニターでフルスクリーンになります。
と言うわけで、サブモニターでフルスクリーン化した時の座標を見てみました。
ofGetWindowPositionX()
,ofGetWindowPositionY()
で座標を取得しました。widthとheightはついでです。
お気づきの通り、y座標が3になってます。それ自体の原因はわかりませんが、要は一旦手動でサブモニターでフルスクリーンにしてあげて、その時の座標に設定してあげればちゃんとサブモニターの領域に入るということです。
というわけで、基本は上記の記事通りですが、設定する座標に注意しましょうという話でした。
ちなみにこの座標の値ですが、メインモニターの解像度に依存するはずなので使いまわしは可能だとは思いますが、検証はしていないのでまたうまくいかなかったら再度手動で調べてみてください。
最後に
以上で終わります。
「ディスプレイ」と「モニター」とか、「メイン・サブ」と「セカンド」とか、言葉の使い分けが非常に面倒くさい。