本文整理汇总了C++中gdiplus::StringFormat::SetMeasurableCharacterRanges方法的典型用法代码示例。如果您正苦于以下问题:C++ StringFormat::SetMeasurableCharacterRanges方法的具体用法?C++ StringFormat::SetMeasurableCharacterRanges怎么用?C++ StringFormat::SetMeasurableCharacterRanges使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gdiplus::StringFormat
的用法示例。
在下文中一共展示了StringFormat::SetMeasurableCharacterRanges方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnPaint
void CSectionCon::OnPaint()///////////////////////
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CRichEditCtrl::OnPaint() for painting messages
Graphics gra(dc);
CRect clientRect;
CRect abstractRect;
GetClientRect(clientRect);
dc.FillSolidRect(clientRect, RGB(255, 255, 255));
Gdiplus::FontFamily ff(_T("微软雅黑"));
Gdiplus::Font font(&ff,15,FontStyle::FontStyleUnderline|FontStyleBold);
SolidBrush brush(Color(255,20, 10, 90));
Gdiplus::StringFormat sf;
sf.SetTrimming(StringTrimmingEllipsisPath);
sf.SetHotkeyPrefix(HotkeyPrefixHide);///////////////////选择'&'的处理
gra.SetTextRenderingHint(TextRenderingHint::TextRenderingHintSingleBitPerPixelGridFit);
gra.DrawString(mtitle, mtitle.GetLength(), &font,RectF(20,0,clientRect.Width()-40,30),&sf,&brush);///////////////绘制标题
RectF titleRectF;
gra.MeasureString(mtitle, mtitle.GetLength(), &font, RectF(20, 0, clientRect.Width() - 40, 30), &sf, &titleRectF);
titleWidth=titleRectF.Width;////////////////计算标题的宽度
Gdiplus::Font font2(&ff, 10);
SolidBrush brush2(Color(255,0,0,0));
gra.DrawString(mabst, mabst.GetLength(), &font2, RectF(20, 34, clientRect.Width() - 40, clientRect.Height() - 40), &sf, &brush2);/////////准备绘制摘要
//////////////////准备高亮关键字
int count=0;
for (int i = 0;i < mabst.GetLength();i++)
{
i = mabst.Find('&', i);
if (i == -1)
break;
count++;
i++;
}
if (count > 30)///////////////////限制高亮个数,提升性能
count = 30;
CharacterRange *cr=new CharacterRange[count];
for (int i = 0, j = 0;i < count;i++)
{
j = mabst.Find('&', j);///////////找到‘&’
cr[i].First = j + 1;//////找到高亮目标
j = j + 1;
cr[i].Length = 1;/////////////
}
Region *region = new Region[count];////////////保存所有关键字所在的位置
sf.SetMeasurableCharacterRanges(count, cr);
gra.MeasureCharacterRanges(mabst, mabst.GetLength(), &font2, RectF(20, 34, clientRect.Width() - 40, clientRect.Height() - 40), &sf, count, region);
RectF rect;//////////关键字所在矩形位置
SolidBrush bru(Color(255, 100, 0));//////////高亮字体颜色
SolidBrush bru2(Color(255, 255, 255));/////////////删除色,用于删除原来的绘制的字
for (int i = 0;i < count;i++)
{
region[i].GetBounds(&rect, &gra);
if (rect.X >= 20)
{
gra.FillRectangle(&bru2, rect);
rect.X = rect.X - 3;
gra.DrawString(mabst.Mid(cr[i].First), 1, &font2, rect, &sf, &bru);
}
}
delete[] cr;
delete[] region;
//CharacterRange cr;
//Region re;////////////关键字所在区域
//RectF rec;///////////////关键字所在的矩形区域
//SolidBrush bru(Color(255, 100, 0));//////////高亮字体颜色
//SolidBrush bru2(Color(255, 255, 255));/////////////删除色,用于删除原来的绘制的字
//for (int i = 0,j=0;i < count;i++)//////////////////////将每一个关键字高亮
//{
// j=mabst.Find('&', j);
// cr.First = j+1;
// j = j + 1;
// cr.Length = 1;
// sf.SetMeasurableCharacterRanges(1, &cr);
// gra.MeasureCharacterRanges(mabst, mabst.GetLength(), &font2, RectF(20, 34, clientRect.Width()-40, clientRect.Height()-40), &sf, 1, &re);
// re.GetBounds(&rec, &gra);
// //rec.Width += 4;
// gra.FillRectangle(&bru2,rec);
// rec.X = rec.X - 3;
// gra.DrawString(mabst.Mid(j), 1, &font2, rec, &sf, &bru);
//}
}