我现在有两个下拉列表,我想在第一个下拉列表中显示所有的等宽字体,然后选择其中一项后,在另一个下拉列表中显示该字体所有的字号,该怎么做?某些字体的宽度是不定的,另一些字体的宽度是固定的,我想列出的就是所有的等宽字体。大家以为如何?另100分在这里:
http://expert.csdn.net/Expert/topic/1113/1113902.xml?temp=.4162256

解决方案 »

  1.   


    int EnumFonts(
      HDC hdc,                  // handle to device context
      LPCTSTR lpFaceName,       // pointer to font typeface name string
      FONTENUMPROC lpFontFunc,  // pointer to callback function
      LPARAM lParam             // pointer to application-supplied data
    );  
     
     
     
      BOOL CFontList::EnumFont()
    {
    HDC hDC = ::GetWindowDC(NULL);
    LOGFONT lf;
    ZeroMemory(&lf,sizeof(lf)); lf.lfCharSet = DEFAULT_CHARSET;
    if (!EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)EnumScreenFontCallbackFn,
    (LPARAM) this, (DWORD) 0))
    return FALSE;
    ::ReleaseDC(NULL,hDC);
    return TRUE;
    }BOOL CALLBACK AFX_EXPORT CFontList::EnumScreenFontCallbackFn(ENUMLOGFONTEX* pelf, 
    NEWTEXTMETRICEX*, int FontType, LPVOID pThis){
    if(pelf->elfLogFont.lfCharSet == SYMBOL_CHARSET)
    return 1;
    LPCTSTR lpszFace = pelf->elfLogFont.lfFaceName;
    FCBDATA* pFCBData = NULL;
    if ( ! strchr(lpszFace, '@') && ! ((CFontList*)pThis)->m_mapFont.Lookup(lpszFace, pFCBData))
    {
    pFCBData = new FCBDATA;
    pFCBData->flag = 0;
    pFCBData->lf = pelf->elfLogFont;
    ((CFontList*)pThis)->m_mapFont.SetAt(lpszFace, pFCBData);
    }
    return 1;
    }这两个函数大约可以。 
     
      

  2.   

    http://freespace.virgin.net/james.brown7/tutorials/enumfixedfonts.c谢谢,惭愧了。