いつも大変お世話になっております。 現在フルスクリーンモード時のオプションを作ろうかと思っているのですが、 ゲーム画面の解像度決定をオプションで指定する場合、 SetGraphModeで指定した解像度にモニタが対応していないと、 SetFullScreenResolutionModeに「DX_FSRESOLUTIONMODE_NATIVE」を渡していても 「DX_FSRESOLUTIONMODE_DESKTOP」と同じ動作をするとリファレンスに書かれてあります。 「DX_FSRESOLUTIONMODE_NATIVE」を明示的に選択したい(ScreenFlipの動作が最も高速である事や グラフィックドライバやモニタのスケーリングを優先させたい)場合、 SetGraphModeへ渡した解像度が「DX_FSRESOLUTIONMODE_NATIVE」で表示されているかどうかを判断するには 現在のフルスクリーン時の解像度がデスクトップ解像度か、SetGraphModeに渡した解像度かを 調べれば分かるかと思うのですが、その方法があっているかをお聞きしたいです。 現状ではGetSystemMetricsに「SM_CXSCREEN」等を渡して得られる数値を 参照するとそれらしい値が得られるんですが、この時の値がデスクトップ解像度だった場合=モニタが解像度に対応していなかった という認識で問題無いでしょうか。 お手数ですが、ご確認の程よろしくお願い致します。
ご返信が遅くなり申し訳ありません > 現状ではGetSystemMetricsに「SM_CXSCREEN」等を渡して得られる数値を > 参照するとそれらしい値が得られるんですが、この時の値がデスクトップ解像度だった場合=モニタが解像度に対応していなかった > という認識で問題無いでしょうか。 モニタがひとつの場合はそれで問題ないとは思うのですが、モニタが複数ある場合は正常に判断できるかは分かりません とりあえず専用の関数があった方が良いと思いましたので、設定したフルスクリーン解像度モードと 実際に適用されているフルスクリーン解像度モードを取得するための関数を追加しました よろしければこちらをダウンロードしてください https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 以下の関数を追加しました // フルスクリーン解像度モードを取得する int GetFullScreenResolutionMode( int *ResolutionMode, int *UseResolutionMode ) ; ResolutionMode には SetFullScreenResolutionMode で指定したフルスクリーン解像度モードが代入されます UseResolutionMode は実際に使用されている解像度モードが代入されます ( 例えば DX_FSRESOLUTIONMODE_NATIVE を指定していてもモニタが指定の解像度に対応していない場合は UseResolutionMode が DX_FSRESOLUTIONMODE_DESKTOP や DX_FSRESOLUTIONMODE_MAXIMUM になります ) よろしければお使いください m(_ _)m
ご返答とフルスクリーン解像度モードを取得する関数を実装いただきありがとうございます! 早速使わせて頂いて、使用されている解像度モードが確認できました。 こちらを使わせて頂きます! またちなみになんですが、 >モニタがひとつの場合はそれで問題ないとは思うのですが、モニタが複数ある場合は正常に判断できるかは分かりません この部分自分なりに調べてみたのですが、 DXライブラリの出力先がSetUseDirectDrawDeviceIndexでセカンダリなどに設定されていた場合に GetSystemMetricsの「SM_CXSCREEN」はプライマリモニタを対象にしているため、期待している値が得られない。 と言う事かなと理解したのですが、それ以外にもうまく動作しない要因が存在するのでしょうか。 もし宜しければお手隙の時にでもお教え頂けますと幸いです。
> DXライブラリの出力先がSetUseDirectDrawDeviceIndexでセカンダリなどに設定されていた場合に > GetSystemMetricsの「SM_CXSCREEN」はプライマリモニタを対象にしているため、期待している値が得られない。 > と言う事かなと理解したのですが はい、その通りです その状況の場合正常に判定できないかもしれないと思いました
早速のご返答いただきありがとうございます! 少しでも込み入った事をしようとするとわからない事だらけで 自分一人では理解が難しくとても助かりました。 フルスクリーンの判別方法に関して関数の追加や助言をいただき 本当にありがとうございました!