SYSMETS1.C视窗讯息处理程式
SYSMETS1.C程式中的WndProc视窗讯息处理程式处理三个讯息:WM_CREATE、WM_PAINT和WM_DESTROY。WM_DESTROY讯息的处理方法与第三章的HELLOWIN程式相同。
WM_CREATE讯息是视窗讯息处理程式接收到的第一个讯息。在CreateWindow函式建立视窗时,Windows产生这个讯息。在处理WM_CREATE讯息时,SYSMETS1呼叫GetDC取得视窗的装置内容,并呼叫GetTextMetrics取得内定系统字体的文字大小。SYSMETS1将平均字元宽度保存在cxChar中,将字元的总高度(包括外部间距)保存在cyChar中。
SYSMETS1还将大写字母的平均宽度保存在静态变数cxCaps中。对於固定宽度的字体, cxCaps等於cxChar。对於可变宽度字体,cxCaps设定为cxChar乘以150%。对於可变宽度字体,TEXTMETRIC结构中的tmPitchAndFamily栏位的低位元为1,对於固定宽度字体,该值为0。 SYSMETS1使用这个位元从cxChar计算cxCaps:
SYSMETS1在处理WM_PAINT讯息处理期间完成所有视窗建立工作。通常,视窗讯息处理程式先呼叫BeginPaint取得装置内容代号,然後用一道for叙述对SYSMETS.H中定义的sysmetrics结构的每一行进行回圈。三列文字用三个TextOut函式显示,对於每一列,TextOut的第三个参数都设定为:
这个参数指示了字串顶端相对於显示区域顶部的图素位置。
第一条TextOut叙述在第一列显示了大写识别字。TextOut的第二个参数是0,这是说文字从显示区域的左边缘开始。文字的内容来自sysmetrics结构的szLabel栏位。我使用Windows函式lstrlen来计算字串的长度,它是TextOut需要的最後一个参数。
第二条TextOut叙述显示了对系统尺寸值的描述。这些描述存放在sysmetrics结构的szDesc栏位中。在这种情况下,TextOut的第二个参数设定为:
第一列显示的最长的