• Welcome to Jose's Read Only Forum 2023.
 

GDI+: GdipGetStringFormatHotkeyPrefix

Started by José Roca, July 01, 2008, 02:50:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

José Roca



The following example creates a StringFormat object, sets the type of hot key prefix processing to be performed on the string, and then gets the type of processing and stores it in a variable. The code then creates a second StringFormat object and uses the stored value to set the type of hot key prefix processing for the second StringFormat object. The code uses the second StringFormat object to draw a string that contains the hot key prefix character. The code also draws the string's layout rectangle.

C++


VOID Example_GetHotkeyPrefix(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, and set its hot key prefix.
   StringFormat stringFormat;
   stringFormat.SetHotkeyPrefix(HotkeyPrefixShow);

   // Get the hot key prefix from the StringFormat object.
   HotkeyPrefix hotkeyPrefix = stringFormat.GetHotkeyPrefix();

   // Create a second StringFormat object with the same hot key prefix.
   StringFormat stringFormat2;
   stringFormat2.SetHotkeyPrefix(hotkeyPrefix);

   // Use the second StringFormat object in a call to DrawString.
  graphics.DrawString(
      L"This &text has some &underlined characters.",
      43,  // string length
      &font,
      RectF(30, 30, 160, 200),
      &stringFormat2,
      &solidBrush);

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


PowerBASIC


SUB GDIP_GetStringFormatHotkeyPrefix (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 hotkeyPrefix 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 hot key prefix.
   hStatus = GdipCreateStringFormat(0, %LANG_NEUTRAL, pStringFormat)
   hStatus = GdipSetStringFormatHotkeyPrefix(pStringFormat, %HotkeyPrefixShow)

   ' // Get the hot key prefix from the StringFormat object.
   hStatus = GdipGetStringFormatHotkeyPrefix(pStringFormat, hotkeyPrefix)

   ' // Create a second StringFormat object with the same flags.
   hStatus = GdipCreateStringFormat(0, %LANG_NEUTRAL, pStringFormat2)
   hStatus = GdipSetStringFormatHotkeyPrefix(pStringFormat2, %HotkeyPrefixShow)

   ' // Use the second StringFormat object in a call to DrawString.
   rcf.x = 30 : rcf.y = 30 : rcf.Width = 170 : rcf.Height = 200
   strText = UCODE$("This &text has some &underlined characters.")
   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.