The following example creates a
StringFormat object, sets the string's format flags, and then gets the 32-bit value that contains the format flags and stores it in a variable. The code then creates another
StringFormat object and uses the stored format flags value to set the format flags of the second
StringFormat object. Next, the code uses the second
StringFormat object to draw a formatted string. The code also draws the string's layout rectangle.
C++
VOID Example_GetFormatFlags(HDC hdc)
{
Graphics graphics(hdc);
SolidBrush solidBrush(Color(255, 255, 0, 0));
FontFamily fontFamily(L"Times New Roman");
Font font(&fontFamily, 24, FontStyleRegular, UnitPoint);
// Create a StringFormat object, and set its format flags.
StringFormat stringFormat;
stringFormat.SetFormatFlags(
StringFormatFlagsDirectionVertical | StringFormatFlagsNoFitBlackBox);
// Get the format flags from the StringFormat object.
INT flags = stringFormat.GetFormatFlags();
// Create a second StringFormat object with the same flags.
StringFormat stringFormat2;
stringFormat2.SetFormatFlags(flags);
// Use the second StringFormat object in a call to DrawString.
graphics.DrawString(
L"This text is vertical because of a format flag.",
47, // string length
&font,
RectF(30, 30, 150, 200),
&stringFormat2,
&solidBrush);
// Draw the rectangle that encloses the text.
Pen pen(Color(255, 255, 0, 0));
graphics.DrawRectangle(&pen, 30, 30, 150, 200);
}
PowerBASIC
SUB GDIP_GetStringFormatFlags (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 pStringFormat2 AS DWORD
LOCAL pSolidBrush AS DWORD
LOCAL flags AS LONG
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, and set its format flags.
hStatus = GdipCreateStringFormat(0, %LANG_NEUTRAL, pStringFormat)
hStatus = GdipSetStringFormatFlags(pStringFormat, %StringFormatFlagsDirectionVertical OR %StringFormatFlagsNoFitBlackBox)
' // Get the format flags from the StringFormat object.
hStatus = GdipGetStringFormatFlags(pStringFormat, flags)
' // Create a second StringFormat object with the same flags.
hStatus = GdipCreateStringFormat(0, %LANG_NEUTRAL, pStringFormat2)
hStatus = GdipSetStringFormatFlags(pStringFormat2, flags)
' // Use the second StringFormat object in a call to DrawString.
rcf.x = 30 : rcf.y = 30 : rcf.Width = 150 : rcf.Height = 200
strText = UCODE$("This text is vertical because of a format flag.")
hStatus = GdipDrawString(pGraphics, STRPTR(strText), LEN(strText) \ 2, pFont, rcf, pStringFormat2, 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 pStringFormat2 THEN GdipDeleteStringFormat(pStringFormat2)
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/GdipGetStringFormatFlags.png)