كيفية حساب حجم الإطار عند التعامل مع وم_جيتمينماكسينفو

StackOverflow https://stackoverflow.com/questions/5351543

  •  27-10-2019
  •  | 
  •  

سؤال

لدي التطبيق وف الذي يعالج وم_جيتمينماكسينفو من أجل تخصيص نافذة كروم ولا يزال تكريم شريط المهام النظام.أي عندما تقوم بتكبير النافذة على الشاشة باستخدام شريط المهام عليها ، فلن تغطي شريط المهام.يعمل هذا بشكل جيد ، باستثناء أن إطار النافذة لا يزال مرئيا عند تكبيره ، وهو أمر قبيح وعديم الفائدة لأنه لا يمكن تغيير حجم النافذة عند تكبيرها على أي حال.

لمكافحة هذا ، وأنا أحسب أنني بحاجة إلى تغيير بلدي التعامل مع WM_GETMINMAXINFO لزيادة حجم النافذة مثل هذا:

var monitorInfo = new SafeNativeMethods.MONITORINFO
    {
        cbSize = Marshal.SizeOf(typeof(SafeNativeMethods.MONITORINFO))
    };
SafeNativeMethods.GetMonitorInfo(monitor, ref monitorInfo);
var workArea = monitorInfo.rcWork;
var monitorArea = monitorInfo.rcMonitor;
minMaxInfo.ptMaxPosition.x = Math.Abs(workArea.left - monitorArea.left);
minMaxInfo.ptMaxPosition.y = Math.Abs(workArea.top - monitorArea.top);
minMaxInfo.ptMaxSize.x = Math.Abs(workArea.right - workArea.left);
minMaxInfo.ptMaxSize.y = Math.Abs(workArea.bottom - workArea.top);

// increase size to account for frame
minMaxInfo.ptMaxPosition.x -= 2;
minMaxInfo.ptMaxPosition.y -= 2;
minMaxInfo.ptMaxSize.x += 4;
minMaxInfo.ptMaxSize.y += 4;

هذا يعمل في الواقع ، ولكن قلقي هو الأسطر الأربعة الأخيرة حيث أفترض أن عرض الإطار هو 2 بكسل.هل هناك نهج أكثر عمومية للحصول على عرض الإطار حتى أتمكن من استيعابه في بلدي WM_GETMINMAXINFO معالج?

شكرا

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

المحلول

سيرتاك حصلت قبالة لي في الاتجاه الصحيح من خلال الإشارة إلى GetSystemMetrics وين 32 أبي.هذا ذكرني من وف SystemParameters الطبقة ، التي وجدت فيها FixedFrameHorizontalBorderHeight و FixedFrameVerticalBorderWidth خصائص.هذه هي بالضبط ما احتاجه:

// increase size to account for frame
minMaxInfo.ptMaxPosition.x -= (int)SystemParameters.FixedFrameVerticalBorderWidth;
minMaxInfo.ptMaxPosition.y -= (int)SystemParameters.FixedFrameHorizontalBorderHeight;
minMaxInfo.ptMaxSize.x += (int)(SystemParameters.FixedFrameVerticalBorderWidth * 2);
minMaxInfo.ptMaxSize.y += (int)(SystemParameters.FixedFrameHorizontalBorderHeight * 2);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top