bengi1 发表于 2019-1-5 14:49:29

SDK 编程中的垂直居中问题

SDK 011讲:获取窗口的各种尺寸 课后作业动动手01题



小甲鱼解答:
答:这道题可能让大家多思考的地方主要是要求二,要做到“绝对居中”,就需要考虑到默认基准点的位置。

例如默认情况下,我们在 (0, 0) 的位置上打印文字,文字会显示在页面左上角,是因为基准点此时在文字的左上角(比较难用文字形容,自己意会一下)。

因此,我们这里需要减去一行文字的高度才能得到真正的垂直居中:(cyClient - cyChar) / 2


其中,cyClient为WM_SIZE消息中的HIWORD宏也就是窗口改变以后的宽度,cyChar是TEXTMETRIC结构体的tmHeight、tmExternalLeading的和也就是一行字的高度
不懂就问:为什么窗口高度 减去 这一行字的高度,得到的差再除以2才是 垂直居中呢!?(为什么不是直接 窗口高度 除以2)

{:10_325:}

1245777533 发表于 2019-1-5 15:14:58

个人理解:因为基准点是限定矩形的左上角,直接窗口高度除2,绘制窗口的时候是从客户区的中央向下打印文本,所以比起绝对居中差了一半的字符高度
页: [1]
查看完整版本: SDK 编程中的垂直居中问题