我創建了一個字體對象並將其選定到設備內容中,然後使用WIN32 API GetTextExtentExPoint計算字符串的範圍,但我得到的範圍是使用範圍系統默認字體。 例如,當我使用系統默認字體時,字符串的範圍是36像素寬度和16像素高度,以及72像素寬度和24像素高度,同時使用我創建的字體。但是,我總是得到36像素沒有使用系統默認字體或我創建的字體。 我的代碼有什麼問題?當我使用GetTextExtentExPoint計算字符串的範圍時出現問題
代碼:
HDC hDC = GetDC();
ATLASSERT(hDC);
HFONT _hFontTitle = 0;
HFONT hSysFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
ATLASSERT(hSysFont);
LOGFONT lf;
if(0 == GetObject(hSysFont, sizeof(LOGFONT), &lf))
_hFontTitle = CreateFont(16, 12, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Fixedsys"));
else{
lf.lfHeight = 16;
lf.lfWidth = 12;
lf.lfWeight = FW_BOLD;
_hFontTitle = CreateFontIndirect(&lf);
ATLASSERT(_hFontTitle);
}
HFONT _hFontContent = 0;
HFONT hSysFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
LOGFONT lf;
if(0 == GetObject(hSysFont, sizeof(LOGFONT), &lf))
_hFontContent = CreateFont(12, 9, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Fixedsys"));
else{
lf.lfHeight = 12;
lf.lfWidth = 9;
lf.lfWeight = FW_NORMAL;
_hFontContent = CreateFontIndirect(&lf);
ATLASSERT(_hFontContent);
}
SIZE sizeTitle = TextMetricsHelper::GetTextLayout(hDC, _szTitle.c_str(), _szTitle.size(), _hFontTitle);
SIZE sizeContent = TextMetricsHelper::GetTextLayout(hDC, _szContent.c_str(), _szContent.size(), _hFontContent);
雖然GetTextLayout是:
SIZE GetTextLayout(HDC hDC, LPCTSTR lpszText, unsigned int cbText, HFONT hFont)
{
//RECT rcText = {0, 0, 8, 10};
HFONT hOldFont = (HFONT)SelectObject(hDC, (HGDIOBJ)hFont);
SIZE textSize;
GetTextExtentPoint32(hDC, lpszText, cbText, &textSize);
//GetTextExtentExPoint(hDC, lpszText, cbText, 0, 0, 0, &sizeOfTitle);
//DrawText(hDC, lpszText, cbText, &rcText, DT_CALCRECT);
SelectObject(hDC, hOldFont);
return textSize;
}
您確定您創建的字體可以使用嗎?你可以用你的字體繪製東西嗎? – Edelcom 2010-01-13 09:35:17
哦,它認爲字體不能使用,我改變了LOGFONT的lfHeight或lfWidth,然後,文本的大小沒有改變。那麼,爲什麼它不能被使用? – 2010-01-13 10:03:52
你確定你正在請求的字體是否存在於系統中?你不必在lf變量中指定mure參數。正如我所說,我沒有創建字體的經驗,但這就是我會測試的。 – Edelcom 2010-01-13 16:43:39