

Visual C++ Express 2008 + Win32APIで、現在のモニタにとって最も自然な解像度を得るにはどうすれば良いのでしょうか。
たとえば 1600x1200のモニタを使っていたら、現在選択している解像度に関係なく、1600, 1200 という値を得たいのです。一見、EnumDisplaySettings を使って選択可能な解像度を列挙し、そのうち最も面積の大きなものを取得すればよさそうですが、ディスプレイ解像度よりも大きな解像度を表示できる機能が付いている場合があり、うまくいきません。
実際私が使っているネットブックは、モニタ解像度は1024x600ですが、縮小表示することによって1024x768を選ぶことができます。
ゲームのフルスクリーンモード時に、画像をドットバイドットで綺麗に表示させたいため、最適な解像度を自動で選べるようにしたいのです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
現在のデスクトップのハンドルを
HWND hWnd = ::GetDesktopWindow();
で取得して、
RECT rcWnd;
::GetClientRect( hWnd, &rcWnd );
で、そのデスクトップのクライアント領域の
サイズを求める方式ではダメですか。
みなさまご回答どうもありがとうございます。
どうやら、APIで一発取得!なんて気軽には行かないようですね。
ご指摘のとおり、液晶モニタのみを考慮にいれていて、それ以外のディスプレイに付いては考えていません。
「ゲーム起動時に設定されていたモニタの解像度」=「ユーザーに取って最も自然な解像度」と考える程度にして、あまり深く突っ込まないほうがいいかもしれません。
手間に見合うだけの結果が得られるのか尋ねられれば、素直にハイと言えないので。
どうもありがとうございました
No.1
- 回答日時:
液晶モニタの場合は「ドットバイドット」というのがありますが、CRTだった場合はどうするのでしょう?
# まぁCRTは衰退している状況ですから考慮しないというのもあるかと思いますが…
プラグアンドプレイモニタであれば、VESA DDCでモニタから情報を取得することが可能かと。
WindowsでやるとなるとDDKとか必要なんですかねぇ…。
# 試したコトはありませんが。
# http://blogs.yahoo.co.jp/linear_pcm0153/33922027 …
# によるとアプリで取得できているっぽいので何らかの方法があるのでしょう。(レジストリ読んでいるのかも知れませんが)
「EDID API」で検索してみると
http://www.nicomsoft.com/wini2cddc/
なんてのも見つけました。
正直、そこまでの手間をかけてドットバイドットを自動で…もどうかと思いますが…
ユーザーによる選択の方が確実かとも思えますけど。
# ドットバイドットにならないモノを選択したとしてもそれはユーザー側の指定ですし、表示が多少狂う…って程度でしょう。
# PC側の能力が低くて、多少荒くなっても低解像度でなるべく軽く動かしたい。という要望もあるやもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
PHP8でWarning:Undefined varia...
-
VBAでActiveDirectoryのユーザ...
-
利用者側のMACアドレスを取得し...
-
VBA Shapesの座標からセル位置...
-
VBA:小数点以下の数字を取得で...
-
asp.netでtextboxの値を取得
-
ListView 項目の選択/選択解除...
-
何が間違ってるのか教えていた...
-
C言語でマウスカーソルハンド...
-
リストビュー:先頭行のアイテ...
-
URIでのページの移動について
-
バージョンナンバーの取得
-
ListViewで複数選択された項目...
-
.NETで現在時刻を常に動作させ...
-
CATALINA_HOMEの取得方法について
-
GetLongPathName関数について
-
VB .netにて現在時刻+1時間後...
-
スクロールバーの幅
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
データ数をカウントしたいのですが
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
count(*)で取得した値をJAVAの...
-
利用者側のMACアドレスを取得し...
-
Flexgridで選択行の列の値を取...
-
VBA:小数点以下の数字を取得で...
-
JavaScriptにおいてコンピュー...
-
Spreadの選択行の取得について
-
ASP(vbscript)におけるクライア...
-
エクセルVBAで複数選択できるよ...
-
asp.netでtextboxの値を取得
-
コンボボックス表示文字列を取...
-
現在時刻をミリ秒まで取得
-
EXCELのリストボックスを選択し...
-
Excel VBA でログインしてい...
-
URIでのページの移動について
-
VBA リストボックス内の値を複...
おすすめ情報