• Welcome to Jose's Read Only Forum 2023.
 

GDI+: GdipCloneStringFormat

Started by José Roca, June 30, 2008, 09:13:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

José Roca



The following example creates a StringFormat object, clones it, and then uses the clone to draw a formatted string.

C++


VOID Example_Clone(HDC hdc)
{
   Graphics graphics(hdc);

   SolidBrush  solidBrush(Color(255, 255, 0, 0));
   FontFamily  fontFamily(L"Times New Roman");
   Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
   
   // Create a StringFormat object.
   StringFormat stringFormat;
   stringFormat.SetAlignment(StringAlignmentCenter);

   // Clone the StringFormat object.
   StringFormat* pStringFormat = stringFormat.Clone();

   // Use the cloned StringFormat object in a call to DrawString.
   graphics.DrawString(
      L"This text was formatted by a cloned StringFormat object.",
      56,  // string length
      &font,
      RectF(30, 30, 200, 200),
      pStringFormat,
      &solidBrush);

   // Draw the rectangle that encloses the text.
   Pen pen(Color(255, 255, 0, 0));
   graphics.DrawRectangle(&pen, 30, 30, 200, 200);
}


PowerBASIC


SUB GDIP_CloneStringFormat (BYVAL hdc AS DWORD)

   LOCAL hStatus AS LONG
   LOCAL pGraphics AS DWORD
   LOCAL pPen AS DWORD
   LOCAL pFont AS DWORD
   LOCAL pFontFamily AS DWORD
   LOCAL pStringFormat AS DWORD
   LOCAL pClonedStringFormat AS DWORD
   LOCAL pSolidBrush AS DWORD
   LOCAL strFontName AS STRING
   LOCAL strText AS STRING
   LOCAL rcf AS RECTF

   hStatus = GdipCreateFromHDC(hdc, pGraphics)

   ' // Create a solid brush
   hStatus = GdipCreateSolidFill(GDIP_ARGB(255, 255, 0, 0), pSolidBrush)

   ' // Create the font
   strFontName = UCODE$("Times New Roman")
   hStatus = GdipCreateFontFamilyFromName(STRPTR(strFontName), %NULL, pFontFamily)
   IF hStatus = %StatusOk AND pFontFamily <> %NULL THEN
      hStatus = GdipCreateFont(pFontFamily, 24, %FontStyleRegular, %UnitPoint, pFont)
      GdipDeleteFontFamily(pFontFamily)
   END IF

   ' Note: You can use the wrapper function GdiPlusCreateFontFromName to create the font:
   ' hStatus = GdiPlusCreateFontFromName("Times New Roman", 24, %FontStyleRegular, %UnitPoint, pFont)

   ' // Create a StringFormat object.
   hStatus = GdipCreateStringFormat(0, %LANG_NEUTRAL, pStringFormat)
   hStatus = GdipSetStringFormatAlign(pStringFormat, %StringAlignmentCenter)

   ' // Clone the StringFormat object.
   hStatus = GdipCloneStringFormat(pStringFormat, pClonedStringFormat)

   ' // Use the generic StringFormat object in a call to DrawString.
   rcf.x = 30 : rcf.y = 30 : rcf.Width = 200 : rcf.Height = 200
   strText = UCODE$("This text was formatted by a cloned StringFormat object.")
   hStatus = GdipDrawString(pGraphics, STRPTR(strText), LEN(strText) \ 2, pFont, rcf, pClonedStringFormat, pSolidBrush)

   ' // Draw the rectangle that encloses the text.
   hStatus = GdipCreatePen1(GDIP_ARGB(255, 255, 0, 0), 1, %UnitPixel, pPen)
   hStatus = GdipDrawRectangle(pGraphics, pPen, rcf.x, rcf.y, rcf.Width, rcf.Height)

   ' // Cleanup
   IF pFont THEN GdipDeleteFont(pFont)
   IF pSolidBrush THEN GdipDeleteBrush(pSolidBrush)
   IF pPen THEN GdipDeletePen(pPen)
   IF pClonedStringFormat THEN GdipDeleteStringFormat(pClonedStringFormat)
   IF pStringFormat THEN GdipDeleteStringFormat(pStringFormat)
   IF pGraphics THEN GdipDeleteGraphics(pGraphics)

END SUB


The following illustration shows the output of the preceding code.