在Windows CE上创建和使用字体

时间:2010-11-02 16:49:37

标签: fonts windows-ce

我遇到了创建字体的问题,而不是默认情况下在Windows文件夹中找到的字体,并使用此字体在屏幕上绘制一些文字。

我正在做的只是将此字体添加到windows文件夹,然后在代码中,我使用 CreateFontIndirect 函数创建字体,传递所需的 LOGFONT 结构有适当的变量,特别是 lfFaceName 变量,然后选择这个字体到设备上下文和最后绘制一些字符串的东西,但没有什么工作,唯一真正有效的字体是arial,cour,times和tahoma这是默认的系统字体,即使使用这些默认字体,也无法真正掌握它们之间的真正区别。

那么有没有具体的方法呢?或者由于Windows CE中的某些限制或者究竟是什么原因,这件事无法完成?

谢谢你们,非常感谢任何帮助:)

更新:为了清楚起见,这里有一些代码。 。

BOOL OnInitDialog()
{
    . . . .

    if (AddFontResource(L"\\windows\\spaceage.ttf") == 1)
    {
         OutputDebugString(L"Font added successfully");

         ::SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
    }

    . . . .
}

void OnPaint()
{
    CPaintDC dc(this);

    HDC hdcMem = ::CreateCompatibleDC(dc);

    HBITMAP hbmpMem = ::CreateCompatibleBitmap(dc, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));

    HBITMAP hbmpMemOld = (HBITMAP)::SelectObject(hdcMem, hbmpMem);

    int iPointSize = 12;

    wstring strFontName = L"spaceage";

    HFONT hFontOld;

    LOGFONT lf;
    memset(&lf, 0, sizeof(LOGFONT));

    int iFontHeight = -1 * (iPointSize * ::GetDeviceCaps(hdcMem, LOGPIXELSY) / 72);

    memset(&lf, 0, sizeof(LOGFONT));

    lf.lfHeight = iFontHeight;
    lf.lfWeight = FW_NORMAL;

    lstrcpy(lf.lfFaceName, m_strFontName.c_str());

    HFONT hFont = ::CreateFontIndirect(&lf);

    if(hFont != NULL)
    {
        hFontOld = (HFONT)::SelectObject(hdcMem, hFont);
    }

    . . . . .

    // do some stuff here

    // draw some text here

    . . . . . 

    ::BitBlt(dc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), hdcMem, 0, 0, SRCCOPY);

    ::SelectFont(hdcMem, hOldFont);
    ::SelectObject(hdcMem, hbmpMemOld);
    ::DeleteObject(hbmpMem);
    ::DeleteDC(hdcMem);
}

2 个答案:

答案 0 :(得分:0)

仅将字体放在Fonts文件夹中是不够的。 CE不会在桌面操作系统等文件副本上自动加载它们。你必须手动加载它。加载字体在this blog entry中列出。

答案 1 :(得分:0)

问题只是字体名称,我使用的是字体文件本身的名称,而不是字体名称,这真的不同,我不知道。

我偶然发现这个,当我调试枚举设备上可用字体的代码时,我发现字体的文件名和字体名称之间存在差异,所以我试了一下脸结构 ENUMLOGFONT 的成员变量 elfFullName 给出的名称,英文字体一切正常,但阿拉伯字体不起作用:D

所以我想我会继续寻找为什么阿拉伯字体不起作用,如果你有任何建议,我真的很感激他们。