zoukankan      html  css  js  c++  java
  • VS2010 如何修改程序菜单字体大小?

     在VS 2008之前的MFC版本,自定义菜单字体是一件比较繁琐的事情,常规的做法是自绘菜单项,即定义一个CMenu的派生类,重载MeasureItem和重载DrawItem两个函数。我发现利用VS2008 Feature Pack可以很轻易地做到这件事。具体就是使用CMFCMenuBar类的接口SetMenuFont函数,SetMenuFont已包含了自绘操作,即调用后立即更新菜单栏。下面是一个简单的使用例子:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
     // 设置菜单栏字体大小
        LOGFONT m_lf;  
        memset(&m_lf, 0, sizeof(LOGFONT));     

         m_lf.lfHeight = 16;                    

        _tcsncpy_s(m_lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);  
        m_wndMenuBar.SetMenuFont(&m_lf); 
     // end

    }

    LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:
    typedef struct tagLOGFONTA
    {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    CHAR lfFaceName[LF_FACESIZE];
    } LOGFONTA


    其各个字段的含义如下:
    lfHeight:指定逻辑单位的字符或者字符元高度
    lfWidth:指定逻辑单位的字体字符的平均宽度
    lfEscapement:指定每行文本输出时相对于设备x轴的角度,其单位为1/10度
    lfOrientation:指定字符基线相对于设备x轴的角度,其单位为1/10度。此值在Win9X中和lfEscapement具有相同的值,而在WinNT下有时候可能不同
    lfWeight:指定字体的重量,Windows中字体重量表示字体的粗细程度,其范围在0~1000之间,正常为400,粗体为700,若此值为空,则使用默认的字体重量
    lfItalic:此值为TRUE时,字体为斜体
    lfUnderline:此值为TRUE时,字体带下划线
    lfStrikeOut:此值为TRUE时,字体带删除线
    lfCharSet:指定所使用的字符集,如GB2312_CHARSET,CHINESEBIG5_CHARSET等
    lfOutPrecision:指定输出精度,它定义了输出与所要求的字体高度、宽度、字符方向及字体类型等相接近的程度
    lfClipPrecision:指定剪辑精度,它定义了当字符的一部分超过剪辑区域时对字符的剪辑方式
    lfQuality:指定输出质量,它定义了GDI在匹配逻辑字体属性到实际的物理字体时所使用的方式
    lfPitchAndFamily:指定字体的字符间距和族
    lfFaceName:指向NULL结尾的字符串的指针,此字符串即为所使用的字体名称,其长度不能超过32个字符,如果为空,则使用系统默认的字体

    CMFCMenuBar::SetMenuFont

    Visual Studio 2010

    Sets the font for all menu bars in your application.

    static BOOL SetMenuFont(
       LPLOGFONT lpLogFont,
       BOOL bHorz = TRUE
    );

    [in]lpLogFont

    A pointer to aLOGFONTstructure that defines the font to set.

    [in]bHorz

    TRUE if you want thelpLogFontparameter to be used for the vertical font, FALSE if you want it to be used for horizontal font.


    TRUEif the method was successful; otherwiseFALSE.


    Two fonts are used for allCMFCMenuBarobjects. These separate fonts are used for horizontal and vertical menu bars.

    The font settings are global variables and affect allCMFCMenuBarobjects.


    Header:afxmenubar.h


  • 相关阅读:
    单片机数字滤波的算法!
    Python中列表的兄弟
    史上最全的Python程序员面试必备常用问题
    新人在学习web前端的容易踩哪些坑?
    linux+arm系统学习与基础学习
    C和C++笔记:动态内存管理
    Python 爬虫干货之urllib库
    单片机、ARM、MUC、DSP、FPGA、嵌入式错综复杂的关系!
    单片机死机了怎么办?
    单片机各种复位电路原理
  • 原文地址:https://www.cnblogs.com/kenter/p/2393190.html
Copyright © 2011-2022 走看看