• 締切済み

モニタの物理解像度を得る(Win32API)

Visual C++ Express 2008 + Win32APIで、現在のモニタにとって最も自然な解像度を得るにはどうすれば良いのでしょうか。 たとえば 1600x1200のモニタを使っていたら、現在選択している解像度に関係なく、1600, 1200 という値を得たいのです。一見、EnumDisplaySettings を使って選択可能な解像度を列挙し、そのうち最も面積の大きなものを取得すればよさそうですが、ディスプレイ解像度よりも大きな解像度を表示できる機能が付いている場合があり、うまくいきません。 実際私が使っているネットブックは、モニタ解像度は1024x600ですが、縮小表示することによって1024x768を選ぶことができます。 ゲームのフルスクリーンモード時に、画像をドットバイドットで綺麗に表示させたいため、最適な解像度を自動で選べるようにしたいのです。

みんなの回答

  • Visar
  • ベストアンサー率19% (17/87)
回答No.2

現在のデスクトップのハンドルを HWND hWnd = ::GetDesktopWindow(); で取得して、 RECT rcWnd; ::GetClientRect( hWnd, &rcWnd ); で、そのデスクトップのクライアント領域の サイズを求める方式ではダメですか。

gookaziki
質問者

お礼

みなさまご回答どうもありがとうございます。 どうやら、APIで一発取得!なんて気軽には行かないようですね。 ご指摘のとおり、液晶モニタのみを考慮にいれていて、それ以外のディスプレイに付いては考えていません。 「ゲーム起動時に設定されていたモニタの解像度」=「ユーザーに取って最も自然な解像度」と考える程度にして、あまり深く突っ込まないほうがいいかもしれません。 手間に見合うだけの結果が得られるのか尋ねられれば、素直にハイと言えないので。 どうもありがとうございました

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

液晶モニタの場合は「ドットバイドット」というのがありますが、CRTだった場合はどうするのでしょう? # まぁCRTは衰退している状況ですから考慮しないというのもあるかと思いますが… プラグアンドプレイモニタであれば、VESA DDCでモニタから情報を取得することが可能かと。 WindowsでやるとなるとDDKとか必要なんですかねぇ…。 # 試したコトはありませんが。 # http://blogs.yahoo.co.jp/linear_pcm0153/33922027.html # によるとアプリで取得できているっぽいので何らかの方法があるのでしょう。(レジストリ読んでいるのかも知れませんが) 「EDID API」で検索してみると http://www.nicomsoft.com/wini2cddc/ なんてのも見つけました。 正直、そこまでの手間をかけてドットバイドットを自動で…もどうかと思いますが… ユーザーによる選択の方が確実かとも思えますけど。 # ドットバイドットにならないモノを選択したとしてもそれはユーザー側の指定ですし、表示が多少狂う…って程度でしょう。 # PC側の能力が低くて、多少荒くなっても低解像度でなるべく軽く動かしたい。という要望もあるやもしれません。

関連するQ&A