سؤال

في تطبيق Win32 واجهة المستخدم الرسومية ولست بحاجة إلى تحديد عرض المنطقة بسلسلة المحتلة على زر في شريط الأدوات لدرجة أنني ضبط عرض زر وفقا لذلك. شريط الأدوات غير عادي القديمة الطبقة النوافذ ToolbarWindow32. يمكنني استخدام التعليمات البرمجية التالية:

 HDC dc = GetDC( toolbarWindowHandle );
 SIZE size;
 GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );

لبعض سلسلة ثابتة (ويقول "مرحبا") شغل size.cx مع قول 72 ولكن عندما جعل لقطة من شريط الأدوات مع نفس سلسلة عرضها على زر أرى أن السلسلة تحتل يقول 56 بكسل.

والفرق يعتمد بشكل واضح على إعدادات خطوط النظام. يمكنني استخدام "خطوط كبيرة" والقيمة التي حصلت عليها كود أكبر من ما المحتلة على الشاشة. على الأجهزة مع "الخطوط الصغيرة" قيمة الحصول على أصغر.

وفكرت إذا كنت تستخدم GetTextExtentPoint32 () على سياق الجهاز نافذة فإنه سيعود بالضبط الحجم الصحيح. ما أفعل الخطأ؟

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

المحلول

لن يتم اختيار

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

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

ولكن أنا متأكد من أن شريط الأدوات Win32 ويستخدم الخط القائمة لتقديم نص الزر، والتي يمكن اكتشافها باستخدام مزيج من SystemParametersInfo وهيكل NONCLIENTMETRICS.

إذا كنت في العمل فما استقاموا لكم فاستقيموا إضافة بعض التعليمات البرمجية.

ولا تحب فقط Win32 و؟

وراجع للشغل، وأنا استخدم ميزة شريط الأدوات نص الزر، وكان لها أبدا أن حجم زر باليد بهذه الطريقة.

http://msdn.microsoft.com/ أون لنا / مكتبة / ms724947 (VS.85) .aspx اتصال    http://msdn.microsoft.com/en-us /library/ms724506(VS.85).asp

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