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


posted @ 2012-03-13 08:46  kenter  阅读(6775)  评论(0编辑  收藏  举报