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で質問しましょう!
似たような質問が見つかりました
- モニター・ディスプレイ WQHDのモニターにフルHDの解像度で表示させた時の見え方 5 2022/08/31 15:44
- デジタルカメラ 録画した4K動画を、フルピクセルで再生したい 5 2023/05/10 00:05
- モニター・ディスプレイ 外部ディスプレイとの解像度の差について 3 2022/05/29 10:40
- モニター・ディスプレイ NVIDIA Geforce GT 710の解像度設定について教えて下さい 3 2022/06/19 13:00
- モニター・ディスプレイ PCモニター解像度について 3 2022/05/08 17:45
- モニター・ディスプレイ 3台のモニタへの表示 2 2022/05/07 16:08
- ノートパソコン ventura13.4.1 にアップデート後、解像度が2880 ×1800になり画面表示が小さくなっ 1 2023/07/01 01:31
- モニター・ディスプレイ windows10 モニタに表示されなくなった 2 2023/08/04 16:58
- モニター・ディスプレイ ワイドモニターの解像度が合わずMacの画面が横に伸ばされて表示されてしまう 2 2022/08/09 07:53
- モニター・ディスプレイ 新しいPCモニターの購入を考えています。株取引とFX取引。 4 2022/05/01 12:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListView 項目の選択/選択解除...
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
VBA:小数点以下の数字を取得で...
-
データ数をカウントしたいのですが
-
VBAでActiveDirectoryのユーザ...
-
JSP+Servletでのページングの常識
-
like演算子内に変数って使えな...
-
getParameter と getAttribut...
-
コンボボックス表示文字列を取...
-
Spreadの選択行の取得について
-
RegQueryValueExwでエラー
-
JavaScriptでWindowsログオンID...
-
C言語にてプログラミングを行っ...
-
Flexgridで選択行の列の値を取...
-
「Excel VBA」 Webクエリ マク...
-
javaで週の最初の日(例:月曜日...
-
JFreeChartの折れ線グラフの太...
-
JAVAでWindowsのアカウント名を...
-
データベースをランダムで読み込む
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
Flexgridで選択行の列の値を取...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
JavaScriptでWindowsログオンID...
-
時間を分に変換するプログラム
-
エクセルVBAで複数選択できるよ...
-
Spreadの選択行の取得について
-
JavaScriptにおいてコンピュー...
-
コンボボックス表示文字列を取...
-
VBA リストボックス内の値を複...
-
利用者側のMACアドレスを取得し...
-
「Excel VBA」 Webクエリ マク...
-
Yahoo! JAPANのID取得について
おすすめ情報