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