本文整理汇总了C++中StringFormat::SetMeasurableCharacterRanges方法的典型用法代码示例。如果您正苦于以下问题:C++ StringFormat::SetMeasurableCharacterRanges方法的具体用法?C++ StringFormat::SetMeasurableCharacterRanges怎么用?C++ StringFormat::SetMeasurableCharacterRanges使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringFormat
的用法示例。
在下文中一共展示了StringFormat::SetMeasurableCharacterRanges方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MeasureString
// --------------------------------------------------------------
void
GFontWin32GDIPlus::GetExtent( const char * str, int inCharCount, float * outWidth,
float * outHeight, VGDevice * context ) const
{
if (!inCharCount) {
*outWidth = *outHeight = 0;
return;
}
// convert input string
DWORD count = (DWORD)mbstowcs(NULL, str, inCharCount);
WCHAR * wstr = (WCHAR*) malloc ((count + 1) * sizeof(WCHAR));
mbstowcs(wstr, str, inCharCount);
//std::string s(str);
//std::wstring wstr(s.length(),L' ');
//std::copy(s.begin(), s.end(), wstr.begin());
Graphics* gdiContext = (Graphics*) GetContext( context );
/* -- known Gdi+ issue:
We must use the following way to determine correct font extent
because typical Graphics::MeasureString() method doesn't work
properly (return values are incorrect due to antialiasing)
*/
Font* dgiFont = GetNativeFont();
// Layout rectangles used for drawing strings
RectF layoutRect_A(0.0f, 0.0f, 1300.0f, 1300.0f);
// 1 range of character positions within the string
CharacterRange charRange(0, inCharCount);
// String format used to apply to string when drawing
StringFormat strFormat;
// Set three ranges of character positions.
strFormat.SetMeasurableCharacterRanges(1, &charRange);
Region *pCharRangeRegions = new Region();
// Get the regions that correspond to the ranges within the string when
// layout rectangle A is used.
gdiContext->MeasureCharacterRanges( wstr, inCharCount, dgiFont, layoutRect_A, &strFormat, 1, pCharRangeRegions);
RectF boundRect;
pCharRangeRegions->GetBounds( &boundRect, gdiContext);
*outWidth = boundRect.Width;
*outHeight = boundRect.Height;
free (wstr);
}
示例2: DrawString
/*
** Draws the string or calculates it's size
**
*/
bool CMeterString::DrawString(Graphics& graphics, RectF* rect)
{
if (m_Font == NULL) return false;
LPCWSTR string = m_String.c_str();
int stringLen = (int)m_String.length();
StringFormat stringFormat;
if (m_AntiAlias)
{
graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
}
else
{
graphics.SetTextRenderingHint(TextRenderingHintSingleBitPerPixelGridFit);
}
switch (m_Align)
{
case ALIGN_CENTERCENTER:
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_RIGHTCENTER:
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_LEFTCENTER:
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_CENTERBOTTOM:
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_RIGHTBOTTOM:
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_LEFTBOTTOM:
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_CENTER: // Same as CenterTop
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
case ALIGN_RIGHT: // Same as RightTop
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
case ALIGN_LEFT: // Same as LeftTop
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
}
if (m_ClipString)
{
stringFormat.SetTrimming(StringTrimmingEllipsisCharacter);
}
else
{
stringFormat.SetTrimming(StringTrimmingNone);
stringFormat.SetFormatFlags(StringFormatFlagsNoClip | StringFormatFlagsNoWrap);
}
CharacterRange range(0, stringLen);
stringFormat.SetMeasurableCharacterRanges(1, &range);
REAL x = (REAL)GetX();
REAL y = (REAL)GetY();
if (rect)
{
PointF pos(x, y);
graphics.MeasureString(string, stringLen, m_Font, pos, &stringFormat, rect);
}
else
{
RectF rcDest(x, y, (REAL)m_W, (REAL)m_H);
m_Rect = rcDest;
if (m_Angle != 0.0f)
{
graphics.TranslateTransform((Gdiplus::REAL)CMeter::GetX(), y);
graphics.RotateTransform(CONVERT_TO_DEGREES(m_Angle));
//.........这里部分代码省略.........