zoukankan      html  css  js  c++  java
  • WINCE5.0应用程序字体的动态加载(原创)

           大家知道,字体文件对于WINCE系统来说,一般都比较庞大,一般在2MB-15MB之间,如果在WINCE的NK中定制几种字体或者大容量字体,

    势必会增加NK的大小,这对嵌入式系统是不现实的。

           好在WINCE系统提供了动态加载字体的API: AddFontResource, 利用这个API函数,我们可以动态加载字体,我们可以把字体放在NAND FLASH中,也可以放在SD卡上,因此不必担心NK会变大,消耗宝贵的FLASH资源问题。而且我们可以根据需要加载多个字体(注意:如果加载的字体太多或太大,也会占用系统内存)。但是要注意的是,系统退出时,记得要卸载动态加载的字体,否则会引起内存泄露。应用过程中,需要注意的问题是:结构体LOGFONT 的成员lfFaceName,应该为字体名,字体名在WINDOWS下,直接打开字体,最上面一行就有字体名显示。

    闲话少说,贴上关键代码:

    #define CUSTOM_FONT  L"Storage Card\\FZY3JW.TTF"

    /////////////////////////////////////////////////////////////////////////////
    // CFont_testDlg message handlers

    BOOL CFont_testDlg::OnInitDialog()
    {
     CDialog::OnInitDialog();

     // Set the icon for this dialog.  The framework does this automatically
     //  when the application's main window is not a dialog
     SetIcon(m_hIcon, TRUE);   // Set big icon
     SetIcon(m_hIcon, FALSE);  // Set small icon
     
     CenterWindow(GetDesktopWindow()); // center to the hpc screen

     // TODO: Add extra initialization here
     if (NULL != AddFontResource(CUSTOM_FONT))
     {
      ::SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
     }
     else
     {
      AfxMessageBox(L"加载方正准圆简体字体失败!");
     }

     if(NULL!= AddFontResource(XINGKAI_FONT))
     {
      ::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
     }
     else
     {
      AfxMessageBox(L"加载行楷简体字体失败!");
     }

     LOGFONT lf;
     
     memset(&lf, 0, sizeof(LOGFONT));
     
     WCHAR lffn[]= TEXT("方正准圆简体");
     
     wcscpy(lf.lfFaceName,lffn);
     
     lf.lfHeight = 20;
     
     lf.lfWidth = 0;
     
     lf.lfQuality = CLEARTYPE_QUALITY;
     
     lf.lfCharSet = GB2312_CHARSET;
     
     //hFontNew = CreateFontIndirect(&lf);
     hFontNew.CreateFontIndirect(&lf);

     GetDlgItem(IDC_STC_TEXT)->SetFont(&hFontNew);

     return TRUE;  // return TRUE  unless you set the focus to a control
    }

    程序退出后,记得卸载字体,否则会造成内存泄露:

     if(RemoveFontResource(CUSTOM_FONT))
     {
      ::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
     }
     else
      AfxMessageBox(L"Failed to UNLOAD font!");


    上述代码经过本人在WINCE5.0模拟器和三星2440平台上测试通过。

    声明: 如果需转载本文,请注明原文作者及出处的链接,否则本人将追究其责任!

  • 相关阅读:
    比较简短的拼音首字母自定义函数
    程序员之路——一个老程序员对刚上大学的学弟学妹的忠告
    Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
    对当前软件行业的一点点感想
    调用opengl程序代码
    windows平台下,c++获取cpu型号,读取注册表获取系统软硬件信息代码
    应该被记住的8位Java人物
    软件开发高手须掌握的4大SQL精髓语句(二)
    如何建立一个网站(我的5年经验谈)
    vs 2010 express 查看malloc能分配多少内存
  • 原文地址:https://www.cnblogs.com/Jade2009/p/1731444.html
Copyright © 2011-2022 走看看