我正面臨創建字體的問題,而不是默認情況下在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);
}
謝謝你的回答我的朋友。我意識到了這個事實,所以我確實使用添加的字體名稱調用了AddFontResource函數,併發送了WM_FONTCHANGE,但這不起作用。 – Ayman 2010-11-02 19:18:20
然後我們需要看一些代碼。 – ctacke 2010-11-02 19:54:26
ctacke,我昨天編輯了這篇文章,對此沒有任何幫助嗎? – Ayman 2010-11-03 14:59:47