Avatar billede viht Nybegynder
12. april 2005 - 16:45 Der er 1 kommentar

Få fat i fonten på titel bar'en

Hvordan får man fat i den font der er brugt på title bars i windows?

En standard form bruger den der er sat op i det aktive display tema, men hvordan hiver man den ud?

Det er sikkert noget interop helvede, men er der nogle af jer der har et kodeeksempel?
Avatar billede viht Nybegynder
12. april 2005 - 16:53 #1
private Font GetCaptionFont()
{
    NONCLIENTMETRICS ncm = new NONCLIENTMETRICS();
    ncm.cbSize = Marshal.SizeOf(typeof(NONCLIENTMETRICS));
    try
    {
        bool result = SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
            ncm.cbSize, ref ncm, 0);

        if(result)
        {
            return Font.FromLogFont(ncm.lfCaptionFont);
        }
        else
        {
            int lastError = Marshal.GetLastWin32Error();
            return null;
        }
    }
    catch(Exception /*ex*/)
    {
        //System.Console.WriteLine(ex.Message);
    }

    return null;
}

private const int SPI_GETNONCLIENTMETRICS = 41;
private const int LF_FACESIZE = 32;

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
    private struct LOGFONT
{
    public int lfHeight;
    public int lfWidth;
    public int lfEscapement;
    public int lfOrientation;
    public int lfWeight;
    public byte lfItalic;
    public byte lfUnderline;
    public byte lfStrikeOut;
    public byte lfCharSet;
    public byte lfOutPrecision;
    public byte lfClipPrecision;
    public byte lfQuality;
    public byte lfPitchAndFamily;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string lfFaceSize;
}

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
    private struct NONCLIENTMETRICS
{
    public int cbSize;
    public int iBorderWidth;
    public int iScrollWidth;
    public int iScrollHeight;
    public int iCaptionWidth;
    public int iCaptionHeight;
    public LOGFONT lfCaptionFont;
    public int iSmCaptionWidth;
    public int iSmCaptionHeight;
    public LOGFONT lfSmCaptionFont;
    public int iMenuWidth;
    public int iMenuHeight;
    public LOGFONT lfMenuFont;
    public LOGFONT lfStatusFont;
    public LOGFONT lfMessageFont;
}

[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
private static extern bool SystemParametersInfo(int uiAction,
    int uiParam, ref NONCLIENTMETRICS ncMetrics, int fWinIni);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester