Re: EnumFont & EnumFontProc
Z>не могу никак решить следующую проблему:
Z>необходимо заполнить CComboBox шрифтами,
Z>установленными в системе. В MSDN нет примера
Z>работы с функциями, указанными в заголовке.
Z>Помогите, если знаете zezix@inbox.ru
Я вам не скажу за весь сабж, но кусочек своего древнего кода, который делает что-то подобное, привести могу
/// --- clFontList ------------------------------------------------
BOOL CALLBACK AFX_EXPORT
EnumFontFamCallBack (ENUMLOGFONT *elf,NEWTEXTMETRICEX *ntm, ///
int type,LPVOID list)
{
((clFontList*)list)->AddFont(elf,ntm,type,"");
return TRUE;
}
BOOL CALLBACK AFX_EXPORT
EnumFontFamCallBackEx (ENUMLOGFONTEX *elf,NEWTEXTMETRICEX *ntm, ///
int type,LPVOID list)
{
((clFontList*)list)->AddFont((ENUMLOGFONT*)elf,ntm,type,
CString(elf->elfScript));
return TRUE;
}
void
clFontList::ReadFonts (CDC& dc,LOGFONT& lf) ///
{
FreeAll();
HDC hDC = dc.m_hDC == NULL? ::GetDC(NULL): dc.m_hDC;
ASSERT(hDC != NULL);
if ((BYTE)::GetVersion() >= 4) {
::EnumFontFamiliesEx(hDC,&lf,
(FONTENUMPROC)EnumFontFamCallBackEx,(LPARAM)this,NULL);
} else {
::EnumFontFamilies(hDC,NULL,
(FONTENUMPROC)EnumFontFamCallBack,(LPARAM)this);
}
if (dc.m_hDC == NULL) ::ReleaseDC(NULL,hDC);
}
void
clFontList::AddFont (ENUMLOGFONT *elf,NEWTEXTMETRICEX*, ///
int,cchar *script)
{
LOGFONT& lf = elf->elfLogFont;
if (lf.lfFaceName[0] == '@' && GetSystemMetrics(SM_DBCSENABLED))
return; // Don't display vertical font for FE platform
switch (elf->elfLogFont.lfCharSet) {
case MAC_CHARSET :
case OEM_CHARSET :
case SYMBOL_CHARSET : return;
}
clFontItem *fi = new clFontItem(lf);
int n;
if (!Search(fi,n))
Insert(fi);
else delete fi;
At(n)->AddScript(elf,script);
}
Если нам не помогут, то мы тоже никого не пощадим.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить