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.
(http://www.jose.it-berater.org/captures/GdipCloneStringFormat.png)