2010-01-13 40 views
0

我創建了一個字體對象並將其選定到設備內容中,然後使用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; 
} 
+0

您確定您創建的字體可以使用嗎?你可以用你的字體繪製東西嗎? – Edelcom 2010-01-13 09:35:17

+0

哦,它認爲字體不能使用,我改變了LOGFONT的lfHeight或lfWidth,然後,文本的大小沒有改變。那麼,爲什麼它不能被使用? – 2010-01-13 10:03:52

+0

你確定你正在請求的字體是否存在於系統中?你不必在lf變量中指定mure參數。正如我所說,我沒有創建字體的經驗,但這就是我會測試的。 – Edelcom 2010-01-13 16:43:39

回答

0

不知道多少有關創建字體等等,但我注意到,無論你CreateFont線轉讓他們的結果相同變量_hFontTitle。這是用意嗎?

+0

哦,謝謝,但是,它永遠不會被執行.. – 2010-01-13 09:57:56

相關問題