首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

获取字体列表 用Combobox展示 报错,请高手报忙

2012-07-29 
获取字体列表 用Combobox显示报错,请高手报忙!BOOL CPageFont::EnumerateFonts(void)/*枚举系统已经安装的

获取字体列表 用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::回调函数名的,而是直接写回调函数名。不知错误是否是这个原因引起?
[解决办法]

探讨
引用:
引用:
引用:
BOOL  CALLBACK  EnumFamScreenCallBackEx试试


???
他的意思是让你用全局函数。。这样应该可以解决这个error



是#include..  后面  extern BOOL  CALLBACK  EnumFamScreenCallBackEx。。。。吗?


[解决办法]
探讨
BOOL  CALLBACK  CPageFont::EnumFamScreenCallBackEx(
--------第一次看到这样写回调函数的,偶从没有用过XXX::回调函数名的,而是直接写回调函数名。不知错误是否是这个原因引起?

[解决办法]
楼主的例子是从网上找的,网上也是用BOOL
CALLBACK
CDlg::EnumFamScreenCallBackEx(
这种方式,只不过没有写头文件,楼主没有看到要将这个函数定义为静态函数

热点排行