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平台上测试通过。

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

  • 相关阅读:
    调试 XPTable
    适合IT经理的编程语言
    请问我如何在一个webBrowser控件中加载一个 html格式的字符串 _NET技术 C#
    DotNetBar 教程
    思梅
    无家可归的苦
    思霞
    思兰
    十大因素——造就优秀的董事长
    思萍
  • 原文地址:https://www.cnblogs.com/Jade2009/p/1731444.html
Copyright © 2011-2022 走看看