的算法来决定自己将在可用区域里占据r
多大一块,最后一个子窗口由于别无选择,所以不需要这样的算法。r
r
当然,初始的可用区域是一个矩形,每次被切割后剩下的可用区域还是一个矩形,不可能是别的形状的。r
r
举例说来,在一个典型单文档程序中,父窗口就是从CFrameW
d派生的主框架窗口,最后一个子窗口就是视图窗口,如果用了CSplitterW
d生成分隔条的话,最后一个子窗口就是拥有分隔条的那个窗口。其它子窗口就是工具栏窗口和状态条窗口,以及可能有的别的控件窗口。r
r
在典型多文档界面程序中,父窗口就是主框架窗口,最后一个子窗口就是覆盖在主窗口客户区,背景为黑灰色,拥有包含文档的子框架窗口的那个窗口,这是个预定义了窗口类的窗口,它的窗口类名是“MDIClie
t”。如果用了CSplitterW
d生成分隔条的话,最后一个子窗口就是拥有分隔条的那个窗口。其它窗口就是工具栏窗口,状态条窗口以及可能有的别的控件窗口。r
r
这个函数和消息是:函数CW
dRepositio
Bars以及消息WM_SIZEPARENT。这个消息是mfc自定义的,不是wi
dows自有的。r
r
先简单说明一下这个函数和消息。r
r
1。函数CW
dRepositio
Barsr
r
这个函数不是虚函数,所以就无法在派生类里通过覆盖来编制自己的版本了,只能搞懂它的功能,以便能灵活使用。r
r
简单而言,这个函数的功能是将可用的客户区区域信息放到消息WM_SIZEPARENT的消息参数里,然后枚举本窗口的所有子窗口,给每个子窗口除掉一个特定的子窗口,相当于上文提到的最后一个子窗口都发送这个消息,每个响应这个消息的子窗口都会把可用客户区切去一块。最后把那个特定的子窗口的尺寸和位置调整到刚好放在最后剩下的可用区域里。r
r
2。消息WM_SIZEPARENTr
r
每个欲参与分配客户区的子窗口都要响应这个消息,除非这个子窗口是那个特定的子窗口。r
r
响应这个消息的子窗口至少要做两件事:1,将可用的父窗口客户区切去自己所占据的一块。2,根据消息参数的指示,将自己的大小和位置调整到刚好容纳到自己所占据的区域里或不做调整。r
r
下面详细介绍一下函数CW
dRepositio
Bars和消息WM_SIZEPARENT。r
r
1。函数CW
dRepositio
BarsvoidRepositio
BarsUINT
IDFirstUINT
IDLastUINT
IDLeftOverUINT
FlagCW
dreposDefaultLPRECTlpRectParamNULLLPCRECTlpRectClie
tNULLBOOLbStretchTRUEr
r
参数比较多,但还是比较好懂的。r
r
(1)
IDFirst和
IDLastr
r
参与分配父窗口客户区的子窗口的id范围。r
r
每个WM_CHILD风格的窗口都有个id,这是在窗口创建过程中指定的。函数CW
dCreater