كيفية حساب حجم الإطار عند التعامل مع وم_جيتمينماكسينفو
-
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);