请问下面程序中,有了创建字体为什么还要系统字体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 }
#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 }
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 // 地区自订
#3,一个字体是可以有多个字符集的,用系统的字符映射表程序charmap.exe 就可以看出来,选择了如宋体,打开“高级查看”选项,下面的“字符集”列表里往往就会有多个项;应该是为了兼容起见,尽可能多的定义了常见的比较可能使用到的字符集如汉字、日文等等,尤其些西方字符集,往往量比较少,多就数十个,定义了也不占多大地方,就加进去了。
1:画刷是不是只有在WM_PAINT消息下才能设置画刷,能否在WM_CREATE消息下设置画刷,比如:
case WM_CREATE:
hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc, GetStockObject(GRAY_BRUSH));
EndPaint(hwnd, &ps);
2:关于InvalidateRect的问题:
它的第三个参数是擦除,擦除的到底是什么???若是第三个参数为TRUE的话,比如有一个矩形背景色是白色,在其中画了一条线,擦除的时候,这条线会被擦除吗?????还是说只是背景色被擦除而已,上面的文字或者线条任然存在。
1. 在需要进行绘制使用到画刷时都可以设置吧,不限定 WM_PAINT 消息里的。
2. 想来是擦除了的吧,那里有条线,除了你自己知道进行维护外,别人是不知道的,只在需要时用背景色/图案填充下。
这些问题,自己把代码按设想的不同场景各自运行下,就能看到结果的吧。