2010-11-02 20 views
2

我正面臨創建字體的問題,而不是默認情況下在Windows文件夾中找到的字體,並使用此字體在屏幕上繪製一些文本。在Windows CE上創建和使用字體

什麼我做的是簡單地增加這種字體到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); 
} 

回答

0

問題是簡單的字體名稱,我使用的是字體文件本身的名稱,而不是字體名稱,這真的不一樣,我不知道。當我調試列舉設備上可用字體的代碼時,我發現字體的文件名和字體名稱之間存在區別,所以我嘗試了面對名稱由成員變量elfFullName的結構ENUMLOGFONT,一切都很好用英文字體給出,但阿拉伯字體不工作:d

所以我想我會繼續尋找下去,爲什麼阿拉伯字體都沒有工作,如果你有任何建議傢伙,我真的會很感激他們。

0

只要將字體放在字體文件夾是不夠的。 CE不會自動將它們加載到桌面操作系統等文件副本上。你必須手動加載它。加載字體概述於this blog entry

+0

謝謝你的回答我的朋友。我意識到了這個事實,所以我確實使用添加的字體名稱調用了AddFontResource函數,併發送了WM_FONTCHANGE,但這不起作用。 – Ayman 2010-11-02 19:18:20

+0

然後我們需要看一些代碼。 – ctacke 2010-11-02 19:54:26

+0

ctacke,我昨天編輯了這篇文章,對此沒有任何幫助嗎? – Ayman 2010-11-03 14:59:47

相關問題