سؤال

أحتاج إلى طريقة للكشف عن ما إذا كانت الشاشة واسعة أم لا، في Windows.

إرجاع GetSystemMetrics حجم سطح المكتب، أي نوع من الأعمال، ولكن إذا كان لدى المستخدم مراقب عريض، فإن 1024 × 768، وأنا سوف يصنفها بشكل غير صحيح على نطاق واسع.

يحتوي GetDevicecapt على مشاكل مماثلة مع HORZRES و VERTRES، وحتى HORZSIZE و Ittsize لإعطاء نتائج غير صحيحة عند استخدام دقة غير عريضة في شاشة واسعة.

هل هناك أي طريقة للكشف عن هذا بشكل موثوق؟

هل كانت مفيدة؟

المحلول

قد تكون قادرا على الحصول على الحجم الفعلي الفعلي من خلال EDID.. وبعد انظر هنا: كيفية الحصول على الحجم الفعلي الصحيح للشاشة؟

نصائح أخرى

فيما يلي نسخة أفضل لا تعبث مع EDID أو التسجيل. يجعل الافتراض (وهو IMHO دقيق للغاية) أن الحد الأقصى للقرار الذي يدعمه العرض هو أفضل مناسبا الأصلي.

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";

هتافات.

جرب systemInformation.primaryItorsize.

سيكون الشيء المعقول أن يصنف الشاشات بعرض نسبة الارتفاع. هذا ما أرى الكثير من الألعاب القيام به هذه الأيام.

إذا كنت تستطيع الحصول على العرض، فمن المحتمل أن تحصل على الارتفاع. بعد ذلك، فإن الإجابة ليست سوى عملية رياضيات صغيرة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top