首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问关于获取系统字体的有关问题

2012-06-19 
请教关于获取系统字体的问题各位大虾,小弟按照下面的步骤获取系统自带的字体(遇到的问题见后面描述)1. 首

请教关于获取系统字体的问题
各位大虾,小弟按照下面的步骤获取系统自带的字体(遇到的问题见后面描述)
1. 首先定义一个Dlg,在其上放了一个ComboBox控件,目的是将系统字体都放到该控件下拉列表中
2. 按照网上的例子,利用EnumFontFamiliesEx和自定义的EnumFontFamProc(GDI中有不知道怎么使用于是就自己定义)函数来获取系统字体,代码如下:

EnumFontFamProc函数(其声明处定义其为Static的函数)
int _stdcall CBKColorDlg::EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,
DWORD nFontType,long lparam)
{
  CBKColorDlg* pWnd = (CBKColorDlg*)lparam;

  if (nFontType & TRUETYPE_FONTTYPE)
  {
pWnd->m_combolist.AddString(lpelf->elfLogFont.lfFaceName); //向ComboBox加字体
  }
  //return 1 to continue enumeration
  return 1;
}

在Dlg的OnInitDlg()中加入以下代码:
//字体
CClientDC dc(this);
LOGFONT lf;
lf.lfCharSet = DEFAULT_CHARSET;
lstrcpy(lf.lfFaceName, _T(""));
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
::EnumFontFamiliesEx((HDC)dc,&lf,(FONTENUMPROC)EnumFontFamProc,(LPARAM)this,0);
this->ReleaseDC(&dc);

最终结果为:(将结果图附上)
有些字体重复出现(出现了6,7次),有的出现了一次,有的没有出现

小弟请教下代码应该这那么修改才能达到预计的效果,谢谢了

PS:第一次插图,不知道成功与否,若有问题小弟还请教下怎么插入图片


[解决办法]
我有一个例程,虽然是日语的,代码部分是一样的。
你试一下吧。



别忘了把
logfont.lfCharSet = SHIFTJIS_CHARSET;
改成中文

省却值 DEFAULT_CHARSET; 。


http://www.softist.com/programming/fontlist/fontlist.htm

-----------------------
2008有了 CMFCFontComboBox ? 真幸福呀。 

[解决办法]
枚举所有字体
LOGFONT lf;
lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
strcpy(lf.lfFaceName,"");
CClientDC dc (this);

//Enumerate the font families
::EnumFontFamiliesEx((HDC) dc,&lf,
(FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);

//枚举函数
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
{
// Create a pointer to the dialog window
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
// add the font name to the list box

pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);

// Return 1 to continue font enumeration
return 1;
}
其中m_ctlFontList是一个列表控件变量

热点排行