gdi、gdi+文本相关函数

GDI:

TextOut()  最低级的文本输出函数,速度最快,没有裁剪,不能带tab(tab键被忽略)

TabbedTextOut()  上面函数的带tab版本

ExtTextOut()  TextOut升级版,可以调整字符间距和裁剪矩形

DrawText()  TextOut升级版,可以是多行文本,指定一个Rect,会自动换行,可以设置对齐方向

DrawTextEx()  drawText升级版,可以指定tab的显示方式

GetTextExtentPoint32()  测量某文本的显示区域

GetTabbedTextExtent()  测量带tab键的字符串的显示区域

GetTextExtentExPoint()  根据某区域测量能显示下的字符个数

GetTextMetrics()  获取字体信息

GetTextFace(hdc,100,cc);  获取设备中字体名

SetTextColor (hdc, rgbColor) 、GetTextColor   设置文本颜色,默认黑色 
 SetBkMode (hdc, iMode) ;   设置背景模式OPAQUE or TRANSPARENT,默认OPAQUE不透明
 SetBkColor (hdc, rgbColor) ;   设置背景颜色,默认白色  WHITE_BRUSH
 GetStockObject(fnObject)  获得一些默认的font , pen ,brush,所有的索引名字可以直接使用,如WHITE_BRUSH
 GetSysColor(nIndex)  都到windows的系统颜色
SetTextCharacterExtra(hdc,nCharExtra) 设置TextOut等函数画的字符的横排间距
SelectObject(hdc,hgdiobj) 将某个属性选入设备环境
CreatFontIndirect(lplf) 创建字体,参数是个结构体
CreateFont 创建字体,有12个参数,不常用,上面的常用

 画路径字体(例子)

BeginPath (hdc) ;    
 BeginPath (hdc) ;   
 StrokePath (hdc) ;   
 FillPath (hdc) ;   
 FillPath (hdc) ;   
 hRgn = PathToRegion (hdc) ;   
 hRgn = PathToRegion (hdc) ;   

 

 

 

 

GDI+(GDI+的文本函数比GDI慢很多):

DrawString()   画字符串

MeasureString()  获得字符串的整体显示区域信息

函数
备注
实例代码
截图
1
Status MeasureString(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const PointF &origin,

  [out]      RectF *boundingBox

) const;
用字体和起始点测量字符串的显示区域
VOID Example_MeasureString4(HDC hdc)

{

   Graphics graphics(hdc);

   // Set up the string.

   WCHAR string[] = L"Measure Text";

   Font font(L"Arial", 16);

   PointF origin(0.0f, 0.0f);

   RectF boundRect;

   // Measure the string.

   graphics.DrawString(string,12,&font,origin,&SolidBrush(Color(255,0,0,0)));

   graphics.MeasureString(string, 12, &font, origin, &boundRect);

   // Draw a rectangle that represents the size of the string.

   graphics.DrawRectangle(&Pen(Color(255, 0, 0, 0)), boundRect);

}

 
2
Status MeasureString(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const RectF &layoutRect,

  [out]      RectF *boundingBox

) const;
用字体和限制矩形擦亮字符串的显示区域
1的基础上加了一个矩形区域比较的判断返回更小的
VOID Example_MeasureString(HDC hdc)

{

   Graphics graphics(hdc);

   // Set up the string.

   WCHAR string[] = L"Measure Text";

   Font font(L"Arial", 16);

   RectF layoutRect(0, 0, 100, 0);

   RectF boundRect;

   // Measure the string.

   graphics.DrawString(string,12,&font,PointF(0,0),&SolidBrush(Color(100,255,0,0)));

   graphics.DrawString(string,12,&font,RectF(0,0,100,500),&StringFormat(),&SolidBrush(Color(100,0,255,0)));

   graphics.MeasureString(string, 12, &font, layoutRect, &boundRect);

   // Draw a rectangle that represents the size of the string.

   graphics.DrawRectangle(&Pen(Color(255, 255, 0, 0)), boundRect);



   //高度为0可以自动测量高度

   layoutRect = RectF(0, 0, 500, 0);

   graphics.MeasureString(string, 12, &font, layoutRect, &boundRect);

   // Draw a rectangle that represents the size of the string.

   graphics.DrawRectangle(&Pen(Color(255, 0, 255, 0)), boundRect);

}
 gdi、gdi+文本相关函数
3
Status MeasureString(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const PointF &origin,

  [in]       const StringFormat *stringFormat,

  [out]      RectF *boundingBox

) const;
1的带StringFormat的版本
VOID Example_MeasureString5(HDC hdc)

{

   Graphics graphics(hdc);

   // Set up the string.

   WCHAR string[] = L"Measure Text";

   Font font(L"Arial", 16);

   PointF origin(0.0f, 0.0f);

   StringFormat format;

   format.SetAlignment(StringAlignmentCenter);

   RectF boundRect;

   // Measure the string.

   graphics.DrawString(string,12,&font,PointF(0,0),&format,&SolidBrush(Color(100,255,0,0)));

   graphics.MeasureString(string, 12, &font, origin, &format, &boundRect);

   // Draw a rectangle that represents the size of the string.

   graphics.DrawRectangle(&Pen(Color(255, 0, 0, 0)), boundRect);

}
 
4
Status MeasureString(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const RectF &layoutRect,

  [in]       const StringFormat *stringFormat,

  [out]      RectF *boundingBox,

  [out]      INT *codepointsFitted,

  [out]      INT *linesFilled

) const;
2的加强版,可以测量指定区域显示下的字符的个数
VOID Example_MeasureString2(HDC hdc)

{

   Graphics graphics(hdc);

   // Set up the string.

   WCHAR string[] = L"Measure Text";

   Font font(L"Arial", 16);

   RectF layoutRect(0.0f, 0.0f, 70, 50.0f);

   StringFormat format;

   format.SetAlignment(StringAlignmentFar);

   RectF boundRect;

   // Measure the string.

   int codepointsFitted;

   int linesFilled;

   graphics.DrawString(string,12,&font,layoutRect,&format,&SolidBrush(Color(255,0,0,0)));

   graphics.MeasureString(string, 12, &font, layoutRect, &format, &boundRect,&codepointsFitted,&linesFilled);

   // Draw a rectangle that represents the size of the string.

   graphics.DrawRectangle(&Pen(Color(255, 0, 0, 0)), boundRect);

   WCHAR *count = new WCHAR[100];

   swprintf(count,100 , L"codepointsFitted:%d   linesFilled:%d",codepointsFitted,linesFilled);

   graphics.DrawString(L"字符串Measure Text,长度12",-1,&font,PointF(0,70),&SolidBrush(Color(255,0,0,0)));

   graphics.DrawString(count,-1,&font,PointF(0,90),&SolidBrush(Color(255,0,0,0)));

}
 gdi、gdi+文本相关函数
5
Status MeasureString(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const SizeF &layoutRectSize,

  [in]       const StringFormat *stringFormat,

  [out]      SizeF *size,

  [out]      INT *codepointsFitted,

  [out]      INT *linesFilled

) const;
 4的RectF换成了SizeF,其他一样,不要位置只要大小,其实位置没有什么用,所以4很少用到  同上  同上

MeasureCharacterRanges()  获得字符串的特定字符的显示位置

Status MeasureCharacterRanges(

  [in]       const WCHAR *string,

  [in]       INT length,

  [in]       const Font *font,

  [in, ref]  const Rectf &layoutRect,

  [in]       const StringFormat *stringFormat,

  [in]       INT regionCount,

  [out]      Region *regions

) const;
测量字符的显示区域 
VOID MeasureCharRanges(HDC hdc)

{

   Graphics graphics(hdc);



   // Brushes and pens used for drawing and painting

   SolidBrush blueBrush(Color(255, 0, 0, 255));

   SolidBrush redBrush(Color(100, 255, 0, 0));

   Pen        blackPen(Color(255, 0, 0, 0));



   // Layout rectangles used for drawing strings

   RectF   layoutRect_A(20.0f, 20.0f, 130.0f, 130.0f);

   RectF   layoutRect_B(160.0f, 20.0f, 165.0f, 130.0f);

   RectF   layoutRect_C(335.0f, 20.0f, 165.0f, 130.0f);



   // Three different ranges of character positions within the string

   CharacterRange charRanges[3] = { CharacterRange(3, 5),

                                    CharacterRange(15, 2),

                                    CharacterRange(30, 15), };



   // Font and string format to apply to string when drawing

   Font         myFont(L"Times New Roman", 16.0f);

   StringFormat strFormat;



    // Other variables

   Region* pCharRangeRegions; // pointer to CharacterRange regions

   short   i;                 // loop counter

   INT     count;             // number of character ranges set

   WCHAR   string[] = L"The quick, brown fox easily jumps over the lazy dog.";





   // Set three ranges of character positions.

   strFormat.SetMeasurableCharacterRanges(3, charRanges);



   // Get the number of ranges that have been set, and allocate memory to 

   // store the regions that correspond to the ranges.

   count = strFormat.GetMeasurableCharacterRangeCount();

   pCharRangeRegions = new Region[count];



   // Get the regions that correspond to the ranges within the string when

   // layout rectangle A is used. Then draw the string, and show the regions.

   graphics.MeasureCharacterRanges(string, -1,

      &myFont, layoutRect_A, &strFormat, count, pCharRangeRegions);

   graphics.DrawString(string, -1,

      &myFont, layoutRect_A, &strFormat, &blueBrush);

   graphics.DrawRectangle(&blackPen, layoutRect_A);

   for ( i = 0; i < count; i++)

   {

      graphics.FillRegion(&redBrush, pCharRangeRegions + i);

   }



   // Get the regions that correspond to the ranges within the string when

   // layout rectangle B is used. Then draw the string, and show the regions.

   graphics.MeasureCharacterRanges(string, -1,

      &myFont, layoutRect_B, &strFormat, count, pCharRangeRegions);

   graphics.DrawString(string, -1,

      &myFont, layoutRect_B, &strFormat, &blueBrush);

   graphics.DrawRectangle(&blackPen, layoutRect_B);

   for ( i = 0; i < count; i++)

   {

      graphics.FillRegion(&redBrush, pCharRangeRegions + i);

   }



   // Get the regions that correspond to the ranges within the string when

   // layout rectangle C is used. Set trailing spaces to be included in the

   // regions. Then draw the string, and show the regions.

   strFormat.SetFormatFlags(StringFormatFlagsMeasureTrailingSpaces);

   graphics.MeasureCharacterRanges(string, -1,

      &myFont, layoutRect_C, &strFormat, count, pCharRangeRegions);

   graphics.DrawString(string, -1,

      &myFont, layoutRect_C, &strFormat, &blueBrush);

   graphics.DrawRectangle(&blackPen, layoutRect_C);

   for ( i = 0; i < count; i++)

   {

      graphics.FillRegion(&redBrush, pCharRangeRegions + i);

   }

   // Delete memory for the range regions.

   delete [] pCharRangeRegions;

}

gdi、gdi+文本相关函数

你可能感兴趣的:(函数)