2008-12-16 12 views
13

Utilizo la API de Win32 y C/C++. Tengo un HFONT y quiero usarlo para crear un nuevo HFONT. La nueva fuente debe usar exactamente las mismas métricas de fuente, excepto que debe ser negrita. Algo así como:Crear HFONT modificado desde HFONT

HFONT CreateBoldFont(HFONT hFont) { 
    LOGFONT lf; 
    GetLogicalFont(hFont, &lf); 
    lf.lfWeight = FW_BOLD; 
    return CreateFontIndirect(&lf); 
} 

El "GetLogicalFont" es la API que falta (por lo que yo puedo decir de todos modos). ¿Hay alguna otra forma de hacerlo? Preferiblemente algo que funciona en Windows Mobile 5+.

Respuesta

8

Algo así - tenga en cuenta que la comprobación de errores se deja como un ejercicio para el lector. :-)

static HFONT CreateBoldWindowFont(HWND window) 
{ 
    const HFONT font = (HFONT)::SendMessage(window, WM_GETFONT, 0, 0); 
    LOGFONT fontAttributes = { 0 }; 
    ::GetObject(font, sizeof(fontAttributes), &fontAttributes); 
    fontAttributes.lfWeight = FW_BOLD; 

    return ::CreateFontIndirect(&fontAttributes); 
} 

static void PlayWithBoldFont() 
{ 
    const HFONT boldFont = CreateBoldWindowFont(someWindow); 
    . 
    . // Play with it! 
    . 
    ::DeleteObject(boldFont); 
}