133上位机VC MFC获取系统当前字体列表
133上位机VC MFC获取系统当前字体列表
功能展示
我们用VC编程时,在修改资源属性时,可以看到有字体的修改,它罗列出了我们电脑系统当前的全部字体,我们当前例程也实现系统字体全部获取功能,效果如图; 要点提示 VC提供了一个函数EnumFontFamiliesEx()专门用于获取系统字体列表,它原型为intEnumFontFamiliesEx( HDC hdc, //handle to device context LPLOGFONT lpLogfont, //pointer to logical font information FONTENUMPROClpEnumFontFamExProc,// pointer to callback function LPARAM lParam, // application-supplied data DWORD dwFlags // reserved; must be zero ); 函数使用可参数例程源码或SMDC;
其中有个回调函数lpEnumFontFamExProc,用于执行获取系统字体列表;系统每获得一字体都会调用此回调函数直到函数返回0或全部字体获取完 实现功能 1.新建基于对话框的应用程序 2.添加一图片控件,修改ID为IDC_EFFECT,用于显示不同字体的效果 3.拖拽组合框ID默认IDC_COMBO1,关联子项选择改变消息,用于更改字体的效果; 4.添加一按钮,关联函数,实现加载系统字体; 5.自定义一回调函数,实现全部字体的加载int CALLBACK EnumFontListFun
函数体部分为 - void CGkbc8Dlg::OnButton1()
- {
- CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);//获取组合框指针
- pCombo->ResetContent(); //组合框内容清除
- //
- LOGFONT logfont;
- memset(&logfont,0,sizeof(logfont));
- logfont.lfCharSet = DEFAULT_CHARSET;
- logfont.lfFaceName[0] =NULL;
- //
- fontlist.RemoveAll();
- EnumFontFamiliesEx(GetDC()->m_hDC,&logfont,(FONTENUMPROC)EnumFontListFun,0,0);//获取字体列表
- for ( POSITION pos =fontlist.GetHeadPosition(); pos != NULL;)//字体列表名显示到组合框
- {
- pCombo->AddString(fontlist.GetNext(pos));
- }
- pCombo->SetCurSel(0);
- }
复制代码- CStringList fontlist;
- int CALLBACK EnumFontListFun (const ENUMLOGFONTEX *lpelfe, const NEWTEXTMETRICEX *lpntme, unsigned long FontType, LPARAM lParam)
- {
- POSITION pos = fontlist.Find(lpelfe->elfLogFont.lfFaceName);
- if (pos == NULL)
- fontlist.AddTail(lpelfe->elfLogFont.lfFaceName);
- return 1 ;
- }
- void CGkbc8Dlg::OnSelchangeCombo1()
- {
- CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
- CString str;
- pCombo->GetWindowText(str);
- //
- if (!str.IsEmpty())
- {
- CFont font;
- font.CreateFont(-14,-10,-900,0,600,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,str);
-
- CRect rect;
- GetDlgItem(IDC_EFFECT)->GetClientRect(rect);
- CDC* pDC = GetDlgItem(IDC_EFFECT)->GetDC();
-
- pDC->FillRect(rect,NULL);
- pDC->SelectObject(&font);
- pDC->SetBkMode(TRANSPARENT);
- pDC->TextOut(40,0,"工控编程吧");
- pDC->TextOut(90,0,"系统当前有效字体全部获取实例");
- font.Detach();
- GetDlgItem(IDC_EFFECT)->ReleaseDC(pDC);
- }
- }
复制代码我们来演示下功能实现的整个过程
|