2012-05-01 179 views
1

在我的WTL應用程序中我試圖更改靜態標籤的字體。但是CreatePointFont返回NULL。爲什麼會這樣呢?爲什麼CreatePointFont()會爲我返回NULL?

CFont font; 

font.CreatePointFont(120, _T("Segoe UI")); 
text.Attach(GetDlgItem(IDC_MAINTEXT)); 
text.SetFont(font); 
+0

獲得了您正在使用的CreatePointFont變體的MSDN頁面的鏈接?我發現只有三個參數,第三個是DC。你是否通過了適當的DC? –

回答

1

你肯定CreatePointFont被返回NULL?

對於要設置的字體,它必須保留在內存中,而從代碼片段看來,變量font在設置後會被直接銷燬。

text對象的生命週期內聲明變量的某個地方不會被刪除,例如在使用MFC對象的類中。

+0

這是罪魁禍首。一旦我的OnInitDialog完成,'font'變量就被銷燬了。 – user555

+0

「對於要設置的字體,它必須留在記憶中」歡呼安德魯,你剛剛度過了我的一天! :) – fduff

1

的nPointSize參數CreatePointFont()是在一個點的十分之一,也許你的12/10 = 1.2個百分點,規模太小。你可能打算通過120

在一個較輕的筆記上,如果您將其用於商業應用程序,您可能還想訪問ban comic sans網站。

+0

你的權利的大小是錯誤的,但它仍然會返回NULL。至於漫畫Sans,我只是拿了我的任何字體。我同意不應該使用漫畫sans。 – user555

+0

也許它與AtlGetControlFont()也返回NULL的事實有關? – user555

1

該文檔是不是太詳細的失敗的情況,但我的猜測是,你不必

檢查,如果它是由EnumFontFamilies功能列出的機器上名字的字體(報價形成documentation):

在Windows EnumFontFamilies函數可用於枚舉所有當前可用字體

+0

我嘗試過所有安裝的字體,從Comic Sans到Arial。 – user555