+ -
当前位置:首页 → 问答吧 → 枚举系统字体

枚举系统字体

时间:2011-12-11

来源:互联网

C/C++ code

INT CALLBACK NEnumFontNameProc (LOGFONT *plf, TEXTMETRIC /*ptm*/,
                                INT /*nFontType*/, LPARAM lParam)
{
    CComboBox *comboBox = (CComboBox*)lParam ;
    comboBox->AddString(plf->lfFaceName) ;

    return TRUE ;
}


//装入系统字体类型
::EnumFontFamiliesEx (GetDC()->m_hDC, NULL, (FONTENUMPROC)NEnumFontNameProc, 
    (LPARAM)&(m_wndEditBar.m_fontNameCombo), NULL) ;



下面那个函数出现错误......报错: .....内存不能为读,

作者: ljhtdcq   发布时间: 2011-12-11

我看别人的也是这样的啊.......

作者: ljhtdcq   发布时间: 2011-12-11

设个断点,看看执行到那一步时,是否有哪个参数不正常的

作者: zyrr159487   发布时间: 2011-12-11

断点调试时,第一个参数GetDC()执行完之后,就出现了错误.....

作者: ljhtdcq   发布时间: 2011-12-11

可以参考此例子
C/C++ code

void CFontsViewDlg::FillFontList(void)   
{   
     int iCurCount;   
     CString strCurFont;   
     CString strPrevFont="";   
     LOGFONT lf;   
     lf.lfCharSet=DEFAULT_CHARSET;   
     lf.lfFaceName[0]=NULL;   
     lf.lfPitchAndFamily=0;   
     m_ctlFontList.ResetContent();   
     CClientDC dc(this);   
     ::EnumFontFamiliesEx((HDC) dc,&lf,(FONTENUMPROC) MyEnumFontProc,(LPARAM) this,0);   
     for (iCurCount=m_ctlFontList.GetCount();iCurCount > 0;iCurCount--)   
     {   
         m_ctlFontList.GetText((iCurCount-1),strCurFont);   
         if (strCurFont==strPrevFont)   
         {   
              m_ctlFontList.DeleteString((iCurCount-1));   
         }   
         else   
         {   
              strPrevFont=strCurFont;   
         }   
     }   
}    


来源http://blog.csdn.net/zyrr159487/article/details/7025779

作者: zyrr159487   发布时间: 2011-12-11