|
M_SIZE讯息。在视窗大小改变时,Windows给视窗讯息处理程式发送一个WM_SIZE讯息。传给视窗讯息处理程式的lParam参数的低字组中包含显示区域的宽度,高字组中包含显示区域的高度。要保存这些尺寸,需要在视窗讯息处理程式中定义两个静态变数:
与cxChar和cyChar相似,这两个变数在视窗讯息处理程式内定义为静态变数,因为在以後处理其他讯息时会用到它们。处理WM_SIZE的方法如下:
实际上您会在每个Windows程式中看到类似的程式码。LOWORD和HIWORD巨集在Windows表头档案WINDEF.H中定义。这些巨集的定义看起来像这样:
这两个巨集传回WORD值(16位元的无正负号整数,范围从0到0xFFFF)。一般,将这些值保存在32位元有号整数中。这就不会牵扯到任何转换问题,并使得这些值在以後需要的任何计算中易於使用。
在许多Windows程式中,WM_SIZE讯息必然跟著一个WM_PAINT讯息。为什么呢?因为在我们定义视窗类别时指定视窗类别样式为:
这种视窗类别样式告诉Windows,如果水平或者垂直大小发生改变, 则强制更新显示区域。
用如下公式计算可以在显示区域内显示的文字的总行数:
如果显示区域的高度太小以至无法显示一个完整的字元,这个公式的结果可以为0。类似地,在显示区域的水平方向可以显示的小写字元的近似数目为:
如果在处理WM_CREATE讯息处理期间取得cxChar和cyChar,则不用担心在这两个计算公式中会出现被0除的情况。在WinMain呼叫CreateWindow时,视窗讯息处理程式接收一个WM_CREATE讯息。在WinMain呼叫ShowWindow之後接收到第一个WM_CREATE讯息,此时cxChar和cyCha |