漫漫开发路|搞清楚系列:什么是一个顶级(top-level)窗口

【漫漫开发路|搞清楚系列:什么是一个顶级(top-level)窗口】_本文原题为:搞清楚系列:什么是一个顶级(top-level)窗口
有这么一个简单的问题
搞了这么久的Windows开发 , 我依然会频繁地对这个问题比较茫然:什么是一个顶级(top-level)窗口?
那 , 今天就来叨叨一下 。
一个top-level窗口是一个不是子窗口的窗口(绕口令来了) 。 说白了 , 就是说 , 这个窗口不带有WM_CHILD属性 。
更多解析
>top-level窗口和子窗口不同 , 一个top-level窗口可以被显示在屏幕的任何位置 , 而子窗口一般只能显示在它的父窗口的客户区 。
>有很多文档里定义top-level窗口为:一个没有父窗口的窗口 。 这个说法可能到导致某种误解:很多人认为使用CreateWindow(Ex)并传递一个有效的父窗口句柄可以创建一个”有父窗口”的窗口 。 如果根据这个定义 , 则这个窗口就不是一个top-level窗口 。
>一个top-level窗口可以被或者不被拥有 , 但是它永远也不可能是一个子窗口 。 我们可以说一个窗口有一个拥有者 , 但是它没有一个父窗口 。
>top-level窗口可以是一个重叠(Overlapped)窗口(带有WS_OVERLAPPED属性 , 通常作为应用程序主窗口),也可以是一个弹出式窗口(带有WM_POPUP属性 , 通常用于各类弹出消息框) 。
>一些涉及窗口操作的API如CreateWindow(Ex),MoveWindow,SetWindowPos , 总是使用屏幕坐标系(左边原点位于屏幕左上角) 。
俩例子儿
下面创建了一个top-level窗口 , 因为它没有设置WM_CHILD属性 。 同时 , 它没有设置父窗口 , 所以它没有被拥有 。
漫漫开发路|搞清楚系列:什么是一个顶级(top-level)窗口
文章图片
下面也是创建了一个top-level窗口 , 因为它没有设置WM_CHILD属性 。 同时 , 它设置了父窗口 , 所以它被这个父窗口所拥有 。
漫漫开发路|搞清楚系列:什么是一个顶级(top-level)窗口
文章图片
总结
经过这么一番咀嚼 , 应该是搞明白什么是一个top-level窗口了吧?
今日份叨叨完毕 。
最后
本文来自”代码大拿”(CodeGuru):《WindowsSDK:Whatisatop-levelwindow?》
漫漫开发路|搞清楚系列:什么是一个顶级(top-level)窗口
文章图片