QQ登录

只需一步,快速开始

133上位机VC MFC获取系统当前字体列表

[ 复制链接 ]

133上位机VC MFC获取系统当前字体列表

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

函数体部分为
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);//获取组合框指针
  4.         pCombo->ResetContent(); //组合框内容清除
  5. //
  6.         LOGFONT  logfont;
  7.         memset(&logfont,0,sizeof(logfont));
  8.         logfont.lfCharSet = DEFAULT_CHARSET;
  9.         logfont.lfFaceName[0] =NULL;
  10. //
  11.         fontlist.RemoveAll();
  12.         EnumFontFamiliesEx(GetDC()->m_hDC,&logfont,(FONTENUMPROC)EnumFontListFun,0,0);//获取字体列表
  13.         for ( POSITION pos =fontlist.GetHeadPosition(); pos != NULL;)//字体列表名显示到组合框
  14.         {
  15.                 pCombo->AddString(fontlist.GetNext(pos));
  16.         }
  17.         pCombo->SetCurSel(0);
  18. }
复制代码
  1. CStringList fontlist;
  2. int CALLBACK EnumFontListFun (const ENUMLOGFONTEX *lpelfe, const NEWTEXTMETRICEX *lpntme, unsigned long FontType, LPARAM lParam)
  3. {
  4.         POSITION pos = fontlist.Find(lpelfe->elfLogFont.lfFaceName);
  5.         if (pos == NULL)
  6.                 fontlist.AddTail(lpelfe->elfLogFont.lfFaceName);
  7.         return 1 ;
  8. }
  9. void CGkbc8Dlg::OnSelchangeCombo1()
  10. {
  11.         CComboBox *pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
  12.         CString str;
  13.         pCombo->GetWindowText(str);
  14. //
  15.         if (!str.IsEmpty())
  16.         {
  17.                 CFont font;
  18.                 font.CreateFont(-14,-10,-900,0,600,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_ROMAN,str);
  19.                
  20.                 CRect rect;
  21.                 GetDlgItem(IDC_EFFECT)->GetClientRect(rect);
  22.                 CDC* pDC = GetDlgItem(IDC_EFFECT)->GetDC();
  23.                
  24.                 pDC->FillRect(rect,NULL);        
  25.                 pDC->SelectObject(&font);
  26.                 pDC->SetBkMode(TRANSPARENT);
  27.                 pDC->TextOut(40,0,"工控编程吧");
  28.                 pDC->TextOut(90,0,"系统当前有效字体全部获取实例");
  29.                 font.Detach();
  30.                 GetDlgItem(IDC_EFFECT)->ReleaseDC(pDC);
  31.         }        
  32. }
复制代码
我们来演示下功能实现的整个过程


请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:133.上位机VC MFC获取系统当前字体列表.rar 
文件大小:141.57 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索