كيفية الحصول على أبعاد نص حقيقية عند تشغيل ClearType؟

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

  •  12-09-2019
  •  | 
  •  

سؤال

لدي تطبيق Win32 Gui يستخدم GDI Havily. يحتاج إلى رسم نص على صورة نقطية في إحداثيات محددة ومحوها لاحقا والبدائل مع الصورة النقطية الأصلية.

أذهب كما يلي:

  • حدد الخط (GetStockObject (default_gui_font))، فرشاة، أشياء أخرى في سياق الجهاز
  • استدعاء gettextextent022 () لحساب حجم النص
  • الآن وجود نقطة بداية النص يمكنني حساب المستطيل المتوقع للنص وتخزينه
  • استدعاء النص () لنفس سياق الجهاز مع نفس نقطة البداية والنص نفسه

واستعادة وقت لاحق الصورة النقطية لمستطيل المتجر.

إنه يعمل بشكل جيد عند إيقاف تشغيل ClearType Antialiasing. ولكن مع ClearType على الحجم الذي تم إرجاعه بواسطة GettextExtEntEnt32 () أصغر قليلا من الحجم الذي يشغله النص فعليا النص عند استدعاء النص (). لذلك عندما استعادت في وقت لاحق الصورة النقطية الأصلية، لا تزال بعض المشارب الصغيرة للنص في مكانها ولدي التحف.

هل هناك أي علاج لهذا دون تعطيل cleartype؟

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

المحلول

يمكنك أيضا محاولة السحب مع DT_CALCRECT لحساب حجم السلسلة. ربما يعمل بشكل أفضل.

يمكنك أيضا كتابة السلسلة باستخدام السحب داخل المستطيل مع الأحجام المساوية للواحد الذي تحصل عليه مع dt_calcrect وسيقطع النص في حالة وجود أكبر قليلا.

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