請問下面程式中,有了創建字體為什么還要系統字體
HFONT CCaiWinMsg::GetFont(void)
#006 {
#007 LOGFONT lf; //字符的結構
#008
#009 //獲取當前系統的字體.
#010 GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT),
#011 &lf);
#012
#013 //設定字體的屬性.
#014 lf.lfWeight = FW_BOLD;
#015 lf.lfItalic = true;
#016 lf.lfHeight = 26;
#017
#018 //設定為宋體.
#019 wsprintf(lf.lfFaceName,_T("%s"),_T("宋體"));
#020
#021 //創建字體并回傳
#022 return CreateFont(lf.lfHeight, lf.lfWidth,
#023 lf.lfEscapement, lf.lfOrientation, lf.lfWeight,
#024 lf.lfItalic, lf.lfUnderline, lf.lfStrikeOut, lf.lfCharSet,
#025 lf.lfOutPrecision, lf.lfClipPrecision, lf.lfQuality,
#026 lf.lfPitchAndFamily, lf.lfFaceName);
#027
#028 }
uj5u.com熱心網友回復:
CreateFont(...) 不是自定義一個特殊字體吧(如規劃某個字符怎么個樣子),而是根據設定從系統字體里挑選個最適合匹配的字體形成一個邏輯字體設定供程式使用。uj5u.com熱心網友回復:
請問大佬意思能不能這樣理解,選擇某一個系統的字體,那么,這個系統名字體就有各種屬性,而有些屬性不是我們想要的,所以我們要修改一下屬性,那么CreateFont就是為這個做準備的,是嗎?就像那個什么鬼linux內核裁剪一樣的道理,可以這么理解嗎???
uj5u.com熱心網友回復:
還有個問題想請教一下大佬,win32上面說系統字體有OEM_FIXED_FONT、ANSI_FIXED_FONT、ANSI_VAR_FONT、SYSTEM_FONT
DEVICE_DEFAULT_FONT、SYSTEM_FIXED_FONT、DEFAULT_GUI_FONT這幾種。
請問這幾種字體與下面的字符集有什么關系,我說的關系意思是一種字體是不是可以對應多種字符集???
#define ANSI_CHARSET 0 // 1252 Latin 1 (ANSI)
#define DEFAULT_CHARSET 1
#define SYMBOL_CHARSET 2
#define MAC_CHARSET 77
#define SHIFTJIS_CHARSET 128 // 932 (DBCS, 日本)
#define HANGEUL_CHARSET 129 // 949 (DBCS, 韓文)
#define HANGUL_CHARSET 129 // " "
#define JOHAB_CHARSET 130 // 1361 (DBCS, 韓文)
#define GB2312_CHARSET 134 // 936 (DBCS, 簡體中文)
#define CHINESEBIG5_CHARSET 136 // 950 (DBCS, 繁體中文)
#define GREEK_CHARSET 161 // 1253希臘文
#define TURKISH_CHARSET 162 // 1254 Latin 5 (土耳其文)
#define VIETNAMESE_CHARSET 163 // 1258越南文
#define HEBREW_CHARSET 177 // 1255希伯來文
#define ARABIC_CHARSET 178 // 1256阿拉伯文
#define BALTIC_CHARSET 186 // 1257波羅的海字集
#define RUSSIAN_CHARSET 204 // 1251俄文 (斯拉夫語系)
#define THAI_CHARSET 222 // 874泰文
#define EASTEUROPE_CHARSET 238 // 1250 Latin 2 (中歐語系)
#define OEM_CHARSET 255 // 地區自訂
uj5u.com熱心網友回復:
#2,不是修改屬性吧,而是那你的要求去套,哪個最匹配就是哪個;文字高度應該是例外,矢量字體可以適配任何的高度,點陣字體就是字體檔案里定義的固定的幾個高度了。#3,一個字體是可以有多個字符集的,用系統的字符映射表程式charmap.exe 就可以看出來,選擇了如宋體,打開“高級查看”選項,下面的“字符集”串列里往往就會有多個項;應該是為了兼容起見,盡可能多的定義了常見的比較可能使用到的字符集如漢字、日文等等,尤其些西方字符集,往往量比較少,多就數十個,定義了也不占多大地方,就加進去了。
uj5u.com熱心網友回復:
不知道大佬是否還在,能否再請教2個問題:
1:畫刷是不是只有在WM_PAINT訊息下才能設定畫刷,能否在WM_CREATE訊息下設定畫刷,比如:
case WM_CREATE:
hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc, GetStockObject(GRAY_BRUSH));
EndPaint(hwnd, &ps);
2:關于InvalidateRect的問題:
它的第三個引數是擦除,擦除的到底是什么???若是第三個引數為TRUE的話,比如有一個矩形背景色是白色,在其中畫了一條線,擦除的時候,這條線會被擦除嗎?????還是說只是背景色被擦除而已,上面的文字或者線條任然存在。
uj5u.com熱心網友回復:
這不是些 c for windows方面的問題嗎,應該發到 c 開發語言版吧。1. 在需要進行繪制使用到畫刷時都可以設定吧,不限定 WM_PAINT 訊息里的。
2. 想來是擦除了的吧,那里有條線,除了你自己知道進行維護外,別人是不知道的,只在需要時用背景色/圖案填充下。
這些問題,自己把代碼按設想的不同場景各自運行下,就能看到結果的吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/94122.html
標籤:Windows客戶端使用
