搞清楚系列:什么是一个子(child)窗口

“还”有这么一个简单的问题

搞了这么久的Windows开发,我依然会频繁地对另一个问题比较茫然:什么是一个子(child)窗口?
那,今天就再来叨叨一下。

一个子窗口是一个设置了WM_CHILD的窗口,并且它有如下属性:
> 它有一个父窗口
> 它始终显示在父窗口的客户区(不能显示到父窗口外面)
> 如果父窗口被移动了,子窗口也会跟着移动(子窗口相对于父窗口的位置不会改变)

更多解析

> 为了创建一个子窗口,我们必须给这个窗口设置WM_CHILD属性并在CreateWindow(Ex)调用中传入一个有效的父窗口句柄。如下所示:

> 通常,子窗口的位置是通过相对于父窗口客户区来指定的。在上面的例子中,5和6指的是相对于父窗口客户区左上角的原点的坐标偏移。下面是两个具体的例子:

> 对于MDI的框架窗口,还需要设置额外的扩展属性:WM_EX_MDICHILD
> WM_CHILDWINDOW和WM_CHILD这两个属性等效
> 通常,控件(例如按钮,列表框等)都是子窗口
> 所有的没有带有WM_CHILD属性的窗口都是top-level窗口
> 请不要把子窗口和被拥有窗口搞混了:尽管一个窗口可以被拥有(它有一个父窗口),但是它可能没有设置WM_CHILD属性。

总结

请不要混淆:WM_CHILD window(设置了WM_CHILD)和owned window(有父窗口)。
今日份叨叨完毕。

最后

本文来自”代码大拿”(CodeGuru):《Windows SDK: What is a child window?》

猜你喜欢

转载自blog.csdn.net/mmxida/article/details/108546741
今日推荐