INFORMACIÓN: Recuperar la cadena de estilo para una fuente TrueType

Seleccione idioma Seleccione idioma
Id. de artículo: 84132 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Resumen

Versión 3.1 de Windows presenta el concepto de un estilo de fuente. En versiones anteriores de Windows, podría tener una fuente negrita, cursiva, subrayado y tachado propiedades, que eran compatibles con los miembros correspondientes de las estructuras de LOGFONT y TEXTMETRIC . Windows 3.1 sigue admitiendo estas propiedades, sin embargo, también admite el concepto de un nombre de estilo para las fuentes TrueType.

Uso de Windows de nombres de estilo se puede mostrar el cuadro de diálogo ChooseFont en el common diálogo cuadros dynamic-link biblioteca (Commdlg.dll). El cuadro de diálogo ChooseFont contiene dos cuadros de lista denominados fuente y estilo de fuente. El cuadro de lista fuente contiene una lista de todos los nombres de cara y el cuadro de lista Estilo de fuente contiene una lista de estilos de fuente para la imagen seleccionada. Por ejemplo, si se selecciona cualquier fuente que no sean TrueType (tales como MS Sans Serif), los estilos siguientes aparecen en el cuadro de lista Estilo:
   Regular
   Bold
   Italic
   Bold Italic
				

Fuentes TrueType pueden tener estos o ampliar más estilos. Por ejemplo, la cara de "Lucida Sans" incluye los siguientes nombres de estilo:
   Regular
   Italic
   Demibold Roman
   Demibold Italic
				

Más información

Como parte de la compatibilidad de TrueType, la función GetOutlineTextMetrics puede utilizarse para recuperar información métrica de fuentes TrueType, incluyendo el nombre de estilo. GetOutlineTextMetrics es el siguiente prototipo:
   DWORD GetOutlineTextMetrics(HDC hdc, UINT cbData,
                               LPOUTLINETEXTMETRIC lpotm);
				
el parámetro hdc identifica el contexto de dispositivo. GetOutlineTextMetrics recupera la información métrica de la fuente seleccionada en el contexto de dispositivo especificado. Para que GetOutlineTextMetrics se realice correctamente, la fuente debe ser una fuente TrueType. El código de ejemplo indica a continuación muestra cómo sintetizar el nombre de estilo de una fuente TrueType no.

El parámetro de cbData especifica el tamaño en bytes, del búfer en el que se devuelve información.

El parámetro lpotm señala a una estructura OUTLINETEXTMETRIC . Si este parámetro es NULL, la función devuelve el tamaño del búfer necesario para la información de métrica recuperada.

La estructura OUTLINETEXTMETRIC contiene la mayoría de la información de métricas de fuente proporcionada con el formato de TrueType. Las partes relativas de la estructura se enumeran a continuación:
   typedef struct tagOUTLINETEXTMETRIC {
   .
   .
   .
   PSTR    otmpFamilyName;
   PSTR    otmpFaceName;
   PSTR    otmpStyleName;
   PSTR    otmpFullName;
   } OUTLINETEXTMETRIC;
				
mientras estos cuatro miembros de la estructura OUTLINETEXTMETRIC se definen como punteros near a cadenas (PSTR), son realmente los desplazamientos en la estructura desde el principio de la estructura. Porque la longitud de estas cadenas no está definida, una aplicación debe asignar espacio para ellos más allá del espacio asignado para la propia estructura OUTLINETEXTMETRIC . El código de ejemplo siguiente muestra esto. También muestra cómo utilizar GetOutlineTextMetrics en una aplicación también funcionará con Windows 3.0.
   #include <windows.h>
   #include <windowsx.h>
   .
   .
   .
   HFONT                hFont;
   LPOUTLINETEXTMETRIC  potm;
   TEXTMETRIC           tm;
   int                  cbBuffer;

   hFont = CreateFont( ..... );

   hFont = SelectObject(hDC, hFont);

   /*
   * Call the GetTextMetrics function to determine whether or not the
   * font is a TrueType font.
   */ 
   GetTextMetrics(hDC, &tm);

   /*
   * GetOutlineTextMetrics is a function implemented in Windows 3.1
   * and later. Assume fWin30 was determined by calling GetVersion.
   */ 
   if (!fWin30 && tm.tmPitchAndFamily & TMPF_TRUETYPE)
   {
     WORD (WINAPI *lpfnGOTM)(HDC, UINT, LPOUTLINETEXTMETRIC);

   /*
   * GetOutlineTextMetrics is exported from
   * GDI.EXE at ordinal #308
   */ 
     lpfnGOTM = GetProcAddress(GetModuleHandle("GDI"),
                               MAKEINTRESOURCE(308));

     /*
      * Call GOTM with NULL to retrieve the size of the buffer.
      */ 
     cbBuffer = (*lpfnGOTM)(hDC, NULL, NULL);

     if (cbBuffer == 0)
     {
       /* GetOutlineTextMetrics failed! */ 
       hFont = SelectObject(hDC, hFont);
       DeleteObject(hFont);
       return FALSE;
     }

     /*
      * Allocate the memory for the OUTLINETEXTMETRIC structure plus
      * the strings.
      */ 
     potm = (LPOUTLINETEXTMETRIC)GlobalAllocPtr(GHND, cbBuffer);

     if (potm)
     {
       potm->otmSize = cbBuffer;

       /*
        * Call GOTM with the pointer to the buffer. It will
        * fill in the buffer.
        */ 
       if (!(*lpfnGOTM)(hDC, cbBuffer, potm))
       {
          /* GetOutlineTextMetrics failed! */ 
          hFont = SelectObject(hDC, hFont);
          DeleteObject(hFont);
          return FALSE;
       }

       /*
        * Do something useful with the string buffers. NOTE: To access
        * the string buffers, the otmp???Name members are used as
        * OFFSETS into the buffer. They *ARE NOT* pointers themselves.
        */ 
       OutputDebugString((LPSTR)potm + (UINT)potm->otmpFamilyName);
       OutputDebugString((LPSTR)potm + (UINT)potm->otmpFaceName);
       OutputDebugString((LPSTR)potm + (UINT)potm->otmpStyleName);
       OutputDebugString((LPSTR)potm + (UINT)potm->otmpFullName);

       /* Don't forget to free the memory! */ 
       GlobalFreePtr(potm);
     }
     else
     {
       /* GlobalAllocPtr failed */ 
       hFont = SelectObject(hDC, hFont);
       DeleteObject(hFont);
       return FALSE;
     }
   }
   else
   {
     /*
      * It was not a TrueType font, or Windows 3.0 is running.
      */ 
     LOGFONT lf;
     char    szStyle[LF_FACESIZE];
     LPSTR   p;

     GetObject(hFont, sizeof(LOGFONT), &lf);

     /*
      * Fabricate a style string. Important note! The strings
      * "Italic", "Bold", and "Regular" are only valid in English. On
      * versions of Windows localized for other countries, these
      * strings will differ.
      */ 
     szStyle[0] = '\0';

     if (lf.lfWeight >= FW_BOLD)
       lstrcpy(szStyle, "Bold ");
     /*
      * If it's "Bold Italic," concatenate.
      */ 
      p = szStyle + lstrlen(szStyle);

      if (lf.lfItalic)
        lstrcpy(p, "Italic");

      if (!lstrlen(szStyle))
        lstrcpy(szStyle, "Regular");

     /*
      * szStyle now holds what is equivalent to the otmpStyleName
      * member.
      */ 
     OutputDebugString(szStyle);
   }

   hFont = SelectObject(hDC, hFont);
   DeleteObject(hFont);
				

Propiedades

Id. de artículo: 84132 - Última revisión: miércoles, 29 de enero de 2014 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Windows Software Development Kit 3.1
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows 95
Palabras clave: 
kbnosurvey kbarchive kbmt kbinfo KB84132 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 84132

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com