2011-09-08 34 views
3

有沒有什麼方法可以在不使用CDC或使用未與顯示器鏈接的CDC的情況下以像素爲單位獲取字符串的寬度。需要檢索字符串寬度的類不會從CWnd繼承以便使用CWnd :: GetDC(),並且無法將現有的CDC傳遞給該函數。沒有CDC的MFC字符串寬度

我試圖創建一個不與顯示器鏈接的虛擬CDC,但是這會導致MFC崩潰。理想情況是這樣的:

m_font = new CFont(); 
m_font->CreatePointFont(size * 10, _T("Arial")); 

m_tempCDC = new CDC(); 
m_tempCDC->SelectObject(m_font); 

return m_tempCDC->GetOutputTextExtent(_T("Test")).cx; 

編輯:應該用字符串文字替換字體名稱變量。

回答

6

字體的寬度取決於它如何轉換爲像素,這取決於它在其上呈現的設備。例如,打印機與顯示器顯然不同。這就是爲什麼你需要一個DC來完成這個功能。

您可以使用CDC::FromHandle(::GetDC(NULL))獲得桌面DC。

0

如果您不知道需要使用的字體,該如何計算寬度?

我會建議計算寬度的地方,你會看到你需要的設備上下文,並將它傳遞給需要這個寬度的類。

+0

雖然我知道字體,CFont對象m_font? – CD1212