欢迎访问Ningto's博客

Menu
  • 首页
  • 归档
  • 关于
  • 书签
  • 必应壁纸
  • IT聚合
  • 工具
    • 我的工具列表
    • 我的网盘
    • 必应每日壁纸API
    • Html转Markdown
    • 仙尘光标
Menu

WTL CComboBox 增加所有字体名(迁移2011-03-10)

最后更新 2017-01-26 06:18:49   阅读量 2263

今天为CComboBox控件增加系统中的字体名折腾了半天, 记录下防止再犯, 或许以后用不到。

  1. 定义一个CComboBox的对象:

    CComboBox m_cbChiFont;
    
  2. 给上面的对象关联一个资源ID:

    m_cbChiFont.Attach(GetDlgItem(IDC_CHI_FONT));
    
  3. 关键地方来了, 首先定义函数所需要的参数, 然后调用EnumFontFamiliesEx(...), 通过这个函数的回调函数来获取字体名,注意回调函数要在类外提前声明, 实现也要在类外,不然会报错,代码如下:

    int CALLBACK EnumFontProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam);
    class xxxx : public xxxx
    {
    ...
    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
    LOGFONT lf;
    HDC hdc;
    hdc = GetDC();
    lf.lfCharSet = GB2312_CHARSET;
    lf.lfFaceName[0] = '/0';
    ::EnumFontFamiliesEx(hdc,&lf,(FONTENUMPROCW)EnumFontProc, (LPARAM)this, 0);
    ReleaseDC(hdc);
    ....
    }
    ...
    };
    int CALLBACK EnumFontProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam)
    {
        CStyleSetDlg *pWnd = (CStyleSetDlg*)lParam;
        if (lpelfe->elfLogFont.lfFaceName[0] != '@')
        {
            pWnd->m_cbChiFont.AddString(lpelfe->elfLogFont.lfFaceName);
        }
        return 1;
    }
    

解释:

EnumFontFamiliesEx第四个参数this,是将当前窗口类的句柄(指针)传给回调函数, 这样我们就可以在回调函数中获取当前窗口指针, 通过这个指针找到ComboBox的对象, 就可以对其进行操作了。

if (lpelfe->elfLogFont.lfFaceName[0] != '@')是为了去掉前面带有@号的字体名, 这种字体是在原来的基础上旋转90度。

EnumFontProc(...)回调函数最后一定要返回1, 这样它会多次调用。 返回0的话就只能执行一次,得到一种字体名。

(转载本站文章请注明作者和出处:泞途 - ningto.com)

下一篇 –  WTL 一个很好用的ToolTip(迁移2011-03-13)
上一篇 – 32位到64位程序移植(迁移 32位到64位程序移植)

  1. Windows
  2. C/C++

toningto@outlook.com

标签云

IOS Qt Life Linux Java MongoDB Boost MQ Node.js Mac C/C++ Tools Design Python Bug Others Javascript Tips React Android Web Mobile Shell Product Go Database Windows

推广链接

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元

多谢支持,用了好几年,服务很稳定支持多设备!

其他

文章RSS

Copyright © 2016 Welcome To Ningto Blog | 鄂ICP备17003086号-2