获取字体列表 用Combobox显示 报错,请高手报忙!
BOOL CPageFont::EnumerateFonts(void)/*枚举系统已经安装的字体*/
{
HDC hDC;
hDC = ::GetWindowDC(NULL);
LOGFONT lf;
ZeroMemory(&lf,sizeof(lf));
lf.lfCharSet = GB2312_CHARSET;
if (!EnumFontFamiliesEx(
hDC, // 设备描述表句柄
&lf, // 逻辑字体信息指针
(FONTENUMPROC)EnumFamScreenCallBackEx, // 回调函数指针
(LPARAM) this,
(DWORD) 0))
return FALSE;
::ReleaseDC(NULL,hDC);
return TRUE;
}
BOOL CALLBACK CPageFont::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= ((CPageFont*)pThis)->m_FontList.AddString(ss); //m_FontList为一个ComboBox的控制变量
return 1;
}
在网上查,大家都是这么写的,我的报错,请各位高手指点!
error C2440: “类型转换”: 无法从“overloaded-function”转换为“FONTENUMPROC”
[解决办法]
BOOL CALLBACK CPageFont::EnumFamScreenCallBackEx(
ENUMLOGFONTEX* pelf,
NEWTEXTMETRICEX* lpntm,
int FontType,
LPVOID pThis) /*回调函数,枚举系统已经安装的字体*/
BOOL CALLBACK EnumFamScreenCallBackEx(
ENUMLOGFONTEX* pelf,
NEWTEXTMETRICEX* lpntm,
int FontType,
LPVOID pThis) /*回调函数,枚举系统已经安装的字体*/
这个函数写成全局或者静态函数
::EnumFontFamiliesEx(pDC->GetSafeHdc(), &logFont, (FONTENUMPROC)CPageFont::EnumFamScreenCallBackEx, (LPARAM)this, 0); // 类静态函数写法
::EnumFontFamiliesEx(pDC->GetSafeHdc(), &logFont, (FONTENUMPROC)EnumFamScreenCallBackEx, (LPARAM)this, 0); // 定义为全局函数写法
[解决办法]
BOOL CALLBACK CPageFont::EnumFamScreenCallBackEx(
--------第一次看到这样写回调函数的,偶从没有用过XXX::回调函数名的,而是直接写回调函数名。不知错误是否是这个原因引起?
[解决办法]