2010-04-13 133 views
6

請不要將其標記爲這個問題的欺騙只是尚未:如何在MFC中創建粗體和斜體標籤?

Bold labels in MFC

這個問題並沒有幫助我。出於某種原因,我沒有看到豐富的編輯控件。相反,我相信我必須在代碼中完成。這裏是一個樣品,我發現:

http://www.tech-archive.net/Archive/VC/microsoft.public.vc.mfc/2006-10/msg00245.html

我的問題是,我不想重新發明了出錯的車輪和測試自己或通過QA。

一定有人之前實現這一點。請分享您的代碼。

我想要做的是:

  • 保持相同的字體大小,家庭等在已創建的標籤,但要粗體和斜體爲好。
  • 保持內存佔用量相當低(不創建任何新的不必要的對象),但沒有得到應用進入不一致的狀態無論是。

我感謝你的幫助。

+1

如果你不使用豐富的編輯控件,您使用的是什麼樣的控制?靜態文本? – 2010-04-13 17:58:35

+1

是的,一個標籤,又名靜態文本。感謝您的問題。 – 2010-04-13 17:59:19

+1

另外,我發現你的「我不想做任何工作,給我的代碼」的態度是很不禮貌的。 – 2010-04-13 18:01:34

回答

7

在父窗口顯示靜態文本控件之前,您需要執行以下操作。

  1. 得到一個處理窗口:CWnd * pwnd = GetDlgItem(IDC_LABEL);
  2. 獲取靜態文本當前字體:CFont * pfont = pwnd->GetFont();
  3. 獲取字體的特點:LOGFONT lf; pfont->GetLogFont(&lf);
  4. 變化lf的lfWeight和lfItalic領域。
  5. 將一個CFont對象放在父窗口中,因此它將在子窗口的整個生命週期中存在。
  6. 初始化的CFont:m_font.CreateFontIndirect(&lf);
  7. 將字體設置爲靜態文本窗口:pwnd->SetFont(&m_font);
+0

事實證明,我還需要在字體調用DeleteObject的()。 http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/69089425-f186-47fe-9c32-baa29ac2a50c – 2010-04-16 16:31:00

+0

不,這也是一個壞主意。 – 2010-04-16 16:40:09

+0

當CFont對象被銷燬時,MFC將自動調用DeleteObject。 – 2010-04-16 18:28:44

相關問題