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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM