如何获得一个系统的字体资源,并用ComboBox显示出来

gaoxt1983 2004-11-22 08:15:25
谢谢各位
...全文
202 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yo_jo 2004-11-22
  • 打赏
  • 举报
回复

void CUseFontDlg::FillFontList()
{
int iCount; //获取的字体的总数目
int iCurCount; //用于循环的变量
CString strCurFont; //当前获取的字体名
CString strPrvFont=""; //上一个字体名
LOGFONT myFont;

//初始化结构体LOGFONT
myFont.lfCharSet=DEFAULT_CHARSET;
strcpy(myFont.lfFaceName,"");

//清空LIST控件内容
m_ctlListFont.ResetContent();

//建立当前的设备上下文
CClientDC myDC(this);

//例举所有字体
::EnumFontFamiliesEx((HDC)myDC,&myFont,(FONTENUMPROC)EnumFontFamProc,(LPARAM)this,0);

//获取字体的总数目
iCount=m_ctlListFont.GetCount();

//利用循环来删除LISTFONT中的重复项
for (iCurCount=iCount;iCurCount>0;iCurCount--)
{
m_ctlListFont.GetText((iCurCount-1),strCurFont);
if(strCurFont==strPrvFont)
m_ctlListFont.DeleteString(iCurCount-1);
strPrvFont=strCurFont;
}

}
----------------------------------------------------------------------------
// m_ctlListFont :存放字体的ListBox控件
Kudeet 2004-11-22
  • 打赏
  • 举报
回复
五、枚举所有字体
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是一个列表控件变量

已经不能再简单啦!
gaoxt1983 2004-11-22
  • 打赏
  • 举报
回复
laiyiling(陌生人·100%·小象) 有简单一点的吗,我实在看不懂……
DentistryDoctor 2004-11-22
  • 打赏
  • 举报
回复
//****************************************************************************************
void CBCGPToolbarFontCombo::RebuildFonts ()
{
ASSERT (m_lstFonts.IsEmpty ());

//------------------------------
// First, take the screen fonts:
//------------------------------
CWindowDC dc (NULL);

LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = m_nCharSet;

::EnumFontFamiliesEx (dc.GetSafeHdc (), &lf,
(FONTENUMPROC) EnumFamScreenCallBackEx, (LPARAM) this, NULL);

//-----------------------------
// Now, take the printer fonts:
//-----------------------------
CPrintDialog dlgPrint (FALSE);

if (AfxGetApp ()->GetPrinterDeviceDefaults (&dlgPrint.m_pd))
{
HDC hDCPrint = dlgPrint.CreatePrinterDC ();
ASSERT (hDCPrint != NULL);

::EnumFontFamiliesEx (hDCPrint, &lf,
(FONTENUMPROC) EnumFamPrinterCallBackEx, (LPARAM) this, NULL);

::DeleteObject (hDCPrint);
}
}

请参考BCG的CBCGPToolbarFontCombo/CBCGPFontComboBox
gaoxt1983 2004-11-22
  • 打赏
  • 举报
回复
1楼的,忘了说了,不能用CFontDialog
Kudeet 2004-11-22
  • 打赏
  • 举报
回复
这是一个枚举打印机支持的所有字体的函数和它的回调函数

BOOL CDlgPrintDlg::EnumerateFonts()
{
HDC hDC;
// 获得系统字体
hDC = ::GetWindowDC(NULL);
LOGFONT lf;
ZeroMemory(&lf,sizeof(lf));
lf.lfCharSet = GB2312_CHARSET;
if (!EnumFontFamiliesEx(hDC,// 设备环境句柄
&lf, // 指向LOGFONT指针
(FONTENUMPROC)EnumFamScreenCallBackEx,// 回调函数
(LPARAM) this,
(DWORD) 0))
return FALSE;
::ReleaseDC(NULL,hDC);
return TRUE;
}

BOOL CALLBACK AFX_EXPORT CDlgPrintDlg::EnumFamScreenCallBackEx(
ENUMLOGFONTEX* pelf, NEWTEXTMETRICEX* /*lpntm*/, int FontType, LPVOID pThis)
{
// 若打印机不支持该字体类型,则返回
if (FontType & RASTER_FONTTYPE)
return 1;
// 添加字体类型
CString ss;
if(FontType & TRUETYPE_FONTTYPE)
ss=_T(pelf->elfLogFont.lfFaceName);
int kk=((CDlgPrintDlg*)pThis)->m_List.AddString(ss);//添加字体到控件
return 1;
}
mengqimxz 2004-11-22
  • 打赏
  • 举报
回复
CEdit m_display;
CFont m_fontDisplay;
mengqimxz 2004-11-22
  • 打赏
  • 举报
回复
void CCommspyDlg::OnFont()
{
CFontDialog dlg;

if(dlg.DoModal() == IDOK)
{
m_fontDisplay.DeleteObject();

m_settings.nPointSize = dlg.GetSize();
m_settings.strFontName = dlg.GetFaceName();

m_fontDisplay.CreatePointFont(m_settings.nPointSize, m_settings.strFontName);

m_display.SetFont(&m_fontDisplay);
}
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧