Freigeben über


Graphics::MeasureCharacterRanges-Methode (gdiplusgraphics.h)

Die Graphics::MeasureCharacterRanges-Methode ruft eine Reihe von Regionen ab, von denen jeder einen Bereich von Zeichenpositionen innerhalb einer Zeichenfolge begrenzt.

Syntax

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
);

Parameter

[in] string

Typ: const WCHAR*

Zeiger auf eine Breitzeichenzeichenfolge.

Wichtig Bei bidirektionalen Sprachen, z. B. Arabisch, darf die Zeichenfolgenlänge 2046 Zeichen nicht überschreiten.
 

[in] length

Typ: INT

Eine ganze Zahl, die die Anzahl der Zeichen im Zeichenfolgenarray angibt. Wenn der Zeichenfolgenparameter auf eine MIT NULL beendete Zeichenfolge zeigt, kann dieser Parameter auf –1 festgelegt werden.

[in] font

Typ: const Font*

Zeiger auf ein Font-Objekt , das die Schriftartmerkmale (Familienname, Größe und Stil der Schriftart) angibt, die auf die Zeichenfolge angewendet werden sollen.

[in, ref] layoutRect

Typ: const Rectf

Verweis auf ein Rechteck, das die Zeichenfolge begrenzt.

[in] stringFormat

Typ: const StringFormat*

Zeiger auf ein StringFormat-Objekt , das die Zeichenbereiche und Layoutinformationen angibt, z. B. Ausrichtung, Kürzung, Tabstopps usw.

[in] regionCount

Typ: INT

Eine ganze Zahl, die die Anzahl der Regionen angibt, die in das Regionsarray empfangen werden sollen. Diese Zahl sollte gleich der Anzahl von Zeichenbereichen sein, die derzeit im StringFormat-Objekt enthalten sind.

[out] regions

Typ: Region*

Zeiger auf ein Array von Region-Objekten , das die Regionen empfängt, von denen jede einen Textbereich begrenzt.

Rückgabewert

Typ: Status

Wenn die Methode erfolgreich ist, gibt sie OK zurück, ein Element der Status-Enumeration .

Wenn die Methode fehlschlägt, wird eines der anderen Elemente der Status-Enumeration zurückgegeben.

Hinweise

Ein Zeichenbereich ist ein Bereich von Zeichenpositionen innerhalb einer Textzeichenfolge. Der Bereich der Anzeige, der von einer Gruppe von Zeichen belegt wird, die vom Zeichenbereich angegeben werden, ist der begrenzungsgebundene Bereich. Ein Zeichenbereich wird durch SetMeasurableCharacterRanges festgelegt. Die Anzahl der derzeit festgelegten Bereiche kann durch Aufrufen von GetMeasurableCharacterRangeCount bestimmt werden. Diese Zahl ist auch die Anzahl der Regionen, die von der MeasureCharacterRanges-Methode abgerufen werden sollen.

Beispiele

Im folgenden Beispiel werden drei Bereiche von Zeichenpositionen innerhalb einer Zeichenfolge definiert und diese Bereiche in einem StringFormat-Objekt festgelegt. Als Nächstes wird die MeasureCharacterRanges-Methode verwendet, um die drei Bereiche der Anzeige abzurufen, die von den von den Bereichen angegebenen Zeichen belegt sind. Dies erfolgt für drei verschiedene Layoutrechtecke, um anzuzeigen, wie sich die Bereiche entsprechend dem Layout der Zeichenfolge ändern. Außerdem werden bei der dritten Wiederholung die Zeichenfolgenformatflags geändert, sodass die gemessenen Bereiche nachfolgende Leerzeichen enthalten.

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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP, Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile gdiplusgraphics.h (include Gdiplus.h)
Bibliothek Gdiplus.lib
DLL Gdiplus.dll

Weitere Informationen

Characterrange

GetMeasurableCharacterRangeCount

Grafiken

SetMeasurableCharacterRanges