Winapi(CまたはC++)から現在の画面解像度を検出するにはどうすればよいですか?
背景:
新しいOpenGLフルスクリーンウィンドウを起動したいが、デスクトップが既に設定されているのと同じ水平および垂直サイズで開きたい。 (今では誰もがLCDスクリーンを使用しているとき、これがスクリーンのネイティブ解像度を得るための最良の方法であると考えました。)
デスクトップの色深度も必死に知る必要はありませんが、それはナイスボーナスになります。
編集:モニターは常に0x0で「開始」するわけではないので、サイズを知っているだけではウィンドウを配置するには不十分であることに注意してください。 MonitorFromWindowを使用して、ウィンドウが表示されているモニターを検索し、GetMonitorInfoを呼び出すことができます。
低レベルのルートに移動したり、解像度を変更する場合は、EnumDisplayDevices、EnumDisplaySettings、ChangeDisplaySettingsを使用する必要があります(これは、リフレッシュレートを知る唯一の方法ですが、GetDeviceCapsは色深度を示します)
システムがGetSystemMetricsまたはGetWindowRectを使用して DPI仮想化 (Vista以降)を使用すると、実際の画面解像度を取得するためにfailDPI Aware Application を作成していない限り、仮想解像度を取得します。
したがって、ここでの最適なオプション(シンプルおよび下位互換性)は、ENUM_CURRENT_SETTINGSでEnumDisplaySettingsを使用することです。
これらは GetSystemMetrics です:
SM_CXSCREEN <幅
SM_CYSCREEN <高さ
それが言うように(SM_CXSCREEN):
プライマリディスプレイモニターの画面の幅(ピクセル単位)。これは、GetDeviceCaps(hdcPrimaryMonitor、HORZRES)のようにGetDeviceCapsを呼び出して取得した値と同じです。
SystemParametersInfo が役立つと思います。
編集: GetMonitorInfo も見てください。
MFCの例GetSystemMetrics EnumDisplayMonitorsおよびGetMonitorInfoによる複数モニターのサポート
このリンクに従ってください: ソースコードで列挙を監視
約1週間前に削除し、3-4-13を編集しました。
これは、ユーザーがデスクトップを低解像度で実行することを決定した場合(悪い考え)や、グラフィックコントローラーが十分に活用できないモニターを手に入れることを決定した場合に適しています。
// get actual size of desktop
RECT actualDesktop;
GetWindowRect(GetDesktopWindow(), &actualDesktop);
GetSystemMetrics関数を使用します
GetSystemMetrics(SM_CXSCREEN)は、画面の幅(ピクセル単位)を返します
GetSystemMetrics(SM_CYSCREEN)-ピクセル単位の高さ
https://msdn.Microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx