第三条TextOut叙述显示从GetSystemMetrics函式取得的数值。变宽字体使得格式化向右对齐的数值有些棘手。从0到9的数字具有相同的宽度,但是这个宽度比空格宽度大。数值可以比一个数字宽,所以不同的数值应该从不同的横向位置开始。
那么,如果我们指定字串结束的图素位置,而不是指定字串的开始位置,以此向右对齐数值,是否会容易一些呢?用SetTextAlign函式就可以做到这一点。在SYSMETS1呼叫:
之後,传给後续TextOut函式的座标将指定字串的右上角,而不是左上角。
显示列数的TextOut函式的第二个参数设定为:
值40*cxChar包含了第二列的宽度和第三列的宽度。在TextOut函式之後,另一个对SetTextAlign的呼叫将对齐方式设定回普通方式,以进行下次回圈。
空间不够
在SYSMETS1程式中存在著一个很难处理的问题:除非您有一个大萤幕跟高解析度的显示卡,否则就无法看到系统尺度列表的最後几行。如果视窗太窄,甚至根本看不到值。
SYSMETS1不知道这个问题。否则我们就会显示一个讯息方块说「抱歉!」程式甚至不知道它的显示区域有多大,它从视窗顶部开始输出文字,并仰赖Windows裁剪超出显示区域底部的内容。
显然,这很不理想。为了解决这个问题,我们的第一个任务是确定程式在显示区域内能输出多少内容。
显示区域的大小
如果您使用过现有的Windows应用程式,可能会发现视窗的尺寸变化极大。视窗最大化时(假定视窗只有标题列并且没有功能表),显示区域几乎占据了整个萤幕。这一最大化了的显示区域的尺寸可以通过以SM_CXFULLSCREEN和SM_CYFULLSCREEN为参数呼叫GetSystemMetrics来获得。视窗的最小尺寸可以很小,有时甚至不存在,更不用说显示区域了。
在最近一章,我们使用GetClientRect函式来取得显示区域的大小。使用这个函式没有什么不好,但是在您每次要使用资讯时就去呼叫它一遍是没有效率的。确定视窗显示区域大小的更好方法是在视窗讯息处理程式中处理W