3

Windows で、モニターが広いかどうかをプログラムで検出する方法が必要です。

GetSystemMetrics はデスクトップのサイズを返しますが、これは機能しますが、ユーザーがたとえば 1024x768 のワイドスクリーン モニターを使用している場合、それを非ワイドとして誤って分類してしまいます。

GetDeviceCaps には、HORZRES と VERTRES で同様の問題があり、ワイド モニタで非ワイド解像度が使用されている場合、HORZSIZE と VERTSIZE でさえ間違った結果になります。

これを確実に検出する方法はありますか?

4

4 に答える 4

4

EDIDを介して実際の物理サイズを取得できる場合があります。ここを参照してください:モニターの正しい物理サイズを取得するには?

于 2009-09-25T15:35:50.637 に答える
2

これは、EDID またはレジストリを台無しにしない、より優れたバージョンです。ディスプレイでサポートされている最大解像度が最適なネイティブ フィットであるという想定 (これは非常に正確です) を行います。

DEVMODEA modeInfo;
modeInfo.dmSize = sizeof(DEVMODEA);
modeInfo.dmDriverExtra = NULL;
int modeNum = 0;
int xMax = 0, yMax = 0;
while (EnumDisplaySettingsExA(0, modeNum, &modeInfo, 0)) {
    ++modeNum;
    if (modeInfo.dmPelsWidth > xMax) {
        xMax = modeInfo.dmPelsWidth;
        yMax = modeInfo.dmPelsHeight;
    }
}
cout << "Monitor aspect ratio : " << (double)xMax/yMax << "\n";

乾杯。

于 2009-12-07T14:00:07.247 に答える
0

SystemInformation.PrimaryMonitorSize を試してください

于 2009-09-25T15:32:06.910 に答える
0

賢明なことは、モニターを幅と高さの比率で分類することです。それが、最近多くのゲームで行われていることです。

幅を取得できれば、おそらく高さを取得できます。その後、答えはわずか 1 回の演算でわかります。

于 2009-09-25T15:54:46.673 に答える