VC设置文本字体_很全面

 VC中字体设置

单独地改变某个静态文本的字体,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。

改静态文体的ID,如:IDC_STATIC1 

在OnInitDialog中添加如下代码: 

CFont * f; 

f = new CFont; 

f->CreateFont(16, // nHeight 

0, // nWidth 

0, // nEscapement 

0, // nOrientation 

FW_BOLD, // nWeight 

TRUE, // bItalic 

FALSE, // bUnderline 

0, // cStrikeOut 

ANSI_CHARSET, // nCharSet 

OUT_DEFAULT_PRECIS, // nOutPrecision 

CLIP_DEFAULT_PRECIS, // nClipPrecision 

DEFAULT_QUALITY, // nQuality 

DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 

_T("Arial")); // lpszFac 

GetDlgItem(IDC_STATIC1)->SetFont(f); 

1需要注意的是,这里我们使用的是CFont指针,而不是普通的CFont局部变量, 在非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。

2整个对话框或窗口的字体的大小,使用对话框或窗口的SetFont()函数却没有任何的作用,可以在初始化时遍历每个控件分别设置来处理,但这里说另一种使用回调函数的简单方法:

调用系统的API函数EnumChildWindows(),传入回调函数和重新定义的字体.(第一个参数不用管) 

. 在文档视图结构中CMainFrame::OnCreate().中调用::EnumChildWindows(). 实现所有窗口和子窗口字体改变

. 在对话框的OnInitDialog(). 中调用::EnumChildWindows(). 改变对话窗上的所有控件. 

回调函数如下: 

// lParam is a pointer to CFont object 

BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam) 

CFont *pFont = (CFont*)lparam; 

CWnd *pWnd = CWnd::FromHandle(hwnd); 

pWnd->SetFont(pFont); 

return TRUE; 

使用1: 

BOOL CAboutDlg::OnInitDialog() 

CDialog::OnInitDialog(); 

// TODO: Add extra initialization here 

::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont()); 

return TRUE; // return TRUE unless you set the focus to a control 

// EXCEPTION: OCX Property Pages should return FALSE 

使用2: 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 

return -1; 

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP 

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) 

TRACE0("Failed to create toolbar\n"); 

return -1; // fail to create 

if (!m_wndStatusBar.Create(this) || 

!m_wndStatusBar.SetIndicators(indicators, 

sizeof(indicators)/sizeof(UINT))) 

TRACE0("Failed to create status bar\n"); 

return -1; // fail to create 

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 

EnableDocking(CBRS_ALIGN_ANY); 

DockControlBar(&m_wndToolBar); 

::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont()); 

return 0; 

3 如何在mfc中实现,当系统的字体变大的时候,对话框上面的字体也相应的变大

//IconFont 

LOGFONT logFont; 

int size = sizeof(LOGFONT); 

bool isGood = SystemParametersInfo(SPI_GETICONTITLELOGFONT,size,&logFont,0); 

if(isGood == true) 

CFont * f; 

f = new CFont; 

const LOGFONT* pFont = new LOGFONT(logFont); 

f->CreateFontIndirectW(pFont); 

//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f); 

//other Font 

NONCLIENTMETRICS ncm = new NONCLIENTMETRICS(); 

bool isGood = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), ref ncm, 0); 

if (isGood == true) 

LOGFONT logFont2; 

//logFont2=ncm.lfntCaptionFont);//CaptionFont 

//logFont2 =ncm.lfntSMCaptionFont;//CaptionFont_Small 

//logFont2 = ncm.lfntMenuFont;//MenuFont 

//logFont2 = ncm.lfntStatusFont;//StatusFont 

logFont2 = ncm.lfntMessageFont;//MessageFont 

CFont * f; 

f = new CFont; 

const LOGFONT* pFont = new LOGFONT(logFont2); 

f->CreateFontIndirectW(pFont); 

//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f); 

以上是取得系统字体的大小,然后再调用上面的第二种方法,窗体上的所有字体都会跟着系统字体的大小改变,哈哈哈哈! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值