El Blog de Rafa Cano

14 junio, 2006

FOXPRO - Obtener fuente predeterminada de Windows

Para obtener la fuente predeterminada de windows usada en los controles, se usa la función API, SystemParametersInfo, pasandole una structura del tipo NONCLIENTMETRICTS, en la cual se almacenan unas estructura LOGFONT que son las que tienen la información de las distintas fuentes usadas por Windows.


Ej.-
LOCAL lcStruc, lcDatos
LOCAL lnTam
DECLARE INTEGER SystemParametersInfo IN Win32API ;
INTEGER nTipoInfo, INTEGER nLongitud, ;
STRING @cEstruct, INTEGER lnAccion


* Creamos la estructura vacía.
m.lcStruc
= BINTOC(340, "4RS") + REPLICATE(CHR(0),336)

SystemParametersInfo(41, 340, @m.lcStruc
, 0) && SPI_GETNONCLIENTMETRICS

* Fuente de la aplicación.
m.lcDatos = SUBSTR(m.lcStruc, 309, 32)
IF
AT(CHR(0), lcDatos) > 0
m.lcDatos = LEFT(m.lcDatos, AT(CHR(0), lcDatos) - 1)
ENDIF

? "Nombre de la Fuente de widows: " + m.lcDatos

* Tamaño de la fuente.
m.
lcDatos = SUBSTR(m.lcStruc, 281, 4)

lnTam = BITNOT(ASC(SUBSTR(m.
lcDatos, 1, 1)) + ;
ASC(SUBSTR(m.
lcDatos, 2, 1)) * 0x100 + ;
ASC(SUBSTR(m.
lcDatos, 2, 1)) * 0x10000 + ;
ASC(SUBSTR(m.
lcDatos, 2, 1)) * 0x1000000)

m.lnTam = m.lnTam - BITRSHIFT(m.lnTam, 2)

? "El tamaño de la fuente de windows: " + TRANSFORM(m.lnTam)