SDK 编程中的垂直居中问题
SDK 011讲:获取窗口的各种尺寸 课后作业动动手01题小甲鱼解答:
答:这道题可能让大家多思考的地方主要是要求二,要做到“绝对居中”,就需要考虑到默认基准点的位置。
例如默认情况下,我们在 (0, 0) 的位置上打印文字,文字会显示在页面左上角,是因为基准点此时在文字的左上角(比较难用文字形容,自己意会一下)。
因此,我们这里需要减去一行文字的高度才能得到真正的垂直居中:(cyClient - cyChar) / 2
其中,cyClient为WM_SIZE消息中的HIWORD宏也就是窗口改变以后的宽度,cyChar是TEXTMETRIC结构体的tmHeight、tmExternalLeading的和也就是一行字的高度
不懂就问:为什么窗口高度 减去 这一行字的高度,得到的差再除以2才是 垂直居中呢!?(为什么不是直接 窗口高度 除以2)
{:10_325:} 个人理解:因为基准点是限定矩形的左上角,直接窗口高度除2,绘制窗口的时候是从客户区的中央向下打印文本,所以比起绝对居中差了一半的字符高度
页:
[1]