كيف يمكن لشريط شريط الأدوات فيستا أو معرفة إعداد الحشو الحدود؟

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

سؤال

لدي شريط أدوات تم تطويره ضمن الإصدارات الأقدم من Windows مقطوعا إلى حد كبير تحت Vista بسبب حشو نافذة الحدود الجديدة. مع الحشوة الحدودية الافتراضية من 4، يتم دفع كل شيء على شريط الأدوات أربعة بكسل إلى أسفل وإلى اليمين، ثم يتم اقتصاص كل شيء أربعة بكسل من الجانبين السفلي واليمين. لا يهمني حقا البعد الأفقي بنفس القدر، لكن عموديا هذا يعني أن التطبيق يفقد ثمانية بكسل من المحتوى المرئي.

عن طريق "شريط الأدوات" أعني نافذة تم إنشاؤها مشابهة لما يلي:

APPBARDATA  AppBarData;
AppBarData.hWnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, MAIN_WNDCLASS,
                                 "", WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
                                 0, 0, 400, TOOLBAR_HEIGHT, NULL, NULL,
                                 AppInstance, NULL);
// more initialization  ....
SHAppBarMessage(ABM_NEW, &AppBarData);

نظرا لأن الحواد الحدودي هو عنصر التكوين جديد على ما يبدو جديدا في Vista، فكيف يمكن تطبيق يعمل في كل من XP و Vista مع هذا؟ أسئلتي هي:

  1. هل من الممكن أن يخبر شريط الأدوات عن نظام التشغيل Vista "تجاهل إعداد" الحشو الحدود "؛ الحشو حدودي هي 0"؟
  2. إذا لم يكن الأمر كذلك، فماذا يكون التطبيق يعرف ما يتم تعيين الحشو على الحدود حتى يتمكن من جعل نافذته أطول من ضعف هذا المبلغ؟
  3. لكلا الأسئلة، كيف يمكنك القيام بذلك بطريقة تسمح بالتنفيذ نفسها للعمل ضمن XP و Vista و Win2003 وما إلى ذلك؟
هل كانت مفيدة؟

المحلول

خيار واحد هو اللعب مع أنماط نافذة مختلفة، بدءا من WS_THICKFRAME.

لمعرفة الحشو، حاول استخدام GetClientRect و GetWindowRect وطرح واحدا من الآخر.

نصائح أخرى

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

رابط في ObjectMix يحاول شرح هذا. من قبل النظام الفرعي، أعتقد أن ما تعنيه هو /subsystem العلم عند ربط .exe, ، أو الإعداد المقابل في Visual Studio.

~ جواهر

حسنا، لقد اكتشفت ذلك، فرز إذا. في حالتي، كان سبب المشكلة استخدام WS_THICKFRAME عند الاتصال CreateWindowEx(), ، الذي لم أكن بحاجة إليه. تم استخدام هذا الإعداد، سابقا، لتقسيط كل شيء عموديا في شريط الأدوات. أعتقد تحت ويندوز إكس بي (عرض كلاسيكي) وإلى وقت سابق، WS_THICKFRAME وأضافت بشكل متوقع 3 بكسل من الحشو على جميع الأحجام.

وبالتالي، قمت بإزالة هذا الخيار وتغيير التعليمات البرمجية لتحريك كل شيء ثلاثة بكسل إلى أسفل وإلى اليمين. الآن يبدو شريط الأدوات مطابقا تحت WinXP و Vista وليس لدي مزعج وغير ضروري (لهذا شريط الأدوات) إضافي.

هذا لا يحل القضية العامة، ولكن نظرا لأن إجابتي قد تساعد الآخرين الذين يركضون في هذا الأمر، فكروا بنشر الحل الخاص بي. آمل أن يساعد هذا شخص آخر.

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