MeasureString() منصات النص على اليسار واليمين

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

  •  02-07-2019
  •  | 
  •  

سؤال

أنا باستخدام+ GDI في C++.(هذه المسألة قد تكون موجودة في C# أيضا).

لاحظت أنه كلما أتصل الرسومات::MeasureString() أو الرسومات::الرباط () السلسلة هو مبطن مع مساحة فارغة على اليسار واليمين.

على سبيل المثال, إذا أنا باستخدام البريد السريع الخط (غير مائل!) و أنا قياس "P" أنا الحصول على 90 ، ولكن "PP" يعطيني 150.كنت اتوقع monospace لإعطاء بالضبط ضعف عرض "PP".

سؤالي هو:هو هذا المقصود أو توثيق السلوك و كيف يمكنني تعطيل هذا ؟

RectF Rect(0,0,32767,32767);
RectF Bounds1, Bounds2;
graphics->MeasureString(L"PP", 1, font, Rect, &Bounds1);
graphics->MeasureString(L"PP", 2, font, Rect, &Bounds2);
margin = Bounds1.Width * 2 - Bounds2.Width;
هل كانت مفيدة؟

المحلول

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

MSDN يوحي باستخدام طريقة مختلفة إذا كنت في حاجة أكثر دقة:

للحصول على مقاييس مناسبة المجاورة السلاسل في التخطيط (على سبيل المثال ، عند تطبيق تنسيق النص), استخدام MeasureCharacterRanges أو طريقة واحدة من MeasureString الطرق التي يأخذ StringFormat, و تمر GenericTypographic.أيضا, ضمان TextRenderingHint عن الرسومات هو AntiAlias.

نصائح أخرى

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

على TextRenderer الدرجة هو المقصود لهذا الغرض ويعمل مع صحيح الأحجام.ترى هذا الرابط من msdn بالنسبة تجول استخدام هذا.

إلحاق StringFormat.GenericTypographic سيتم إصلاح المشكلة:

graphics->MeasureString(L"PP", 1, font, width, StringFormat.GenericTypographic);

تطبيق نفس السمة DrawString.

يبدو أنه قد يكون أيضا الاتصال ملمحا, وبناء على هذا kb المادة ، لماذا يظهر النص مختلفة عندما تعادل مع GDIPlus مقابل GDI

TextRenderer كانت كبيرة للحصول على حجم الخط.ولكن في الرسم حلقة باستخدام TextRenderer.DrawText كان بطيئا للغاية بالمقارنة مع الرسومات.الرباط().

منذ عرض سلسلة المشكلة الخاصة بك أفضل حالا باستخدام مزيج من TextRenderer.MeasureText والرسومات.الرباط..

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