初看上去,HWND_TOP 和 HWND_TOPMOST 有点类似,但是实际上在调用 DeferWindowPos 或者 SetWindowPos时,它们之间的差别还挺大。

在同级窗口的维护机制中,有一个概念叫做 Z 序 (Z-order) 。出于此讨论的目的,顶级窗口也被视为同级窗口。事实上,大多数人在说”Z 序”时想到的正是顶级窗口的 Z 序。

Z 序应可视化为窗口的垂直堆栈,具体来说,就是哪个窗口在上方,哪个在下方。
在 Windows 3.0 版本之前,窗口的排序规则还是挺简单的:HWND_TOP 标志将会将它指定的窗口设定到窗口 Z 序的最上面。

Windows 3.0 版本开始,系统增加了”最顶层”窗口(Topmost)的概念。这些是始终保持”高于”非最顶层窗口的顶级窗口。要使窗口最顶层,请调用 DeferWindowPos(或其等价函数),HWND_TOPMOST 作为 hWndInsertAfter 参数的值。若要使窗口不在最顶层,请使用 HWND_NOTOPMOST。

由于引入了”最顶层”窗口,HWND_TOP 现在使窗口” 在 Z 顺序中尽可能高,同时不会违反最顶层窗口始终出现在非最顶层窗口上方的规则”。这在实践中意味着什么?

> 如果窗口位于最顶部(topmost),则 HWND_TOP 将其置于 Z 顺序的最顶部。
> 如果窗口不是最顶层(topmost)的,则 HWND_TOP 将其放在所有非最顶层窗口的顶部(即,如果存在,则位于最低的 topmost 窗口的正下方)。

注意:上面的讨论完全忽略了所有者和拥有窗口的问题。我省略了它们,因为它们会增加一层复杂性,分散主要话题的注意力。

总结

在实际体验中,我发现 topmost 窗口会给一些用户带来困扰,所以,在实际开发中,没有特殊的理由,我一般不使用 topmost。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What’s the difference between HWND_TOP and HWND_TOPMOST?》

说说 HWND_TOP 和 HWND_TOPMOST 的区别相关推荐

  1. 窗口置顶(置于桌面所有程序之上)VC/MFC 怎么将窗口置顶

    软件界面全屏显示后,需要把窗体置于其他桌面程序之上,但总是置于其他弹出框之下,会造成用户忽略了导致用户不明什么原因. 百度查了好多方法总是失败. 后来查到了CSND的一个帖子http://bbs.cs ...

  2. delphi控件使用

    Standard页 1-      Tlistbox控件 重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sende ...

  3. mfc让图片与按钮一起_MFC 基础知识:对话框背景添加图片和按钮Button添加图片...

    很长时间没有看MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识.的确,任 // TODO: 在此添加额外的初始化代 ...

  4. MFC 基础知识:对话框背景添加图片和按钮Button添加图片

    很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识.的确,任何知识一段时间过后都比较容易忘记,但回顾 ...

  5. MFC开发IM-自绘按钮控件,给按钮设置背景图片

    MFC 基础知识:对话框背景添加图片和按钮Button添加图片 很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回 ...

  6. 窗口取消置顶后被父窗口挡住,HWND_TOPMOST与HWND_NOTOPMOST踩坑记录

    遇到问题 使用 ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); ::SetWindowPos(hwnd ...

  7. MoveWindow() SetWindowPos()的区别与联系

    敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...

  8. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  9. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

最新文章

  1. Oracle索引失效问题
  2. 活动 | PMcaff大讲堂预告:听CRM大神教你玩转CRM
  3. 释放虚拟GPU力量 NVIDIA 加速企业远程办公生产力变革
  4. delphi 点击wsdl出不了描述文件_iOS 13 公测版来了,安装公测版官方描述文件
  5. ffmpeg处理hikvision平台PS流
  6. 基于python+django房屋租赁管理系统pycharm源码lw
  7. Matlab的复共轭转置
  8. flac音乐格式怎么转换mp3?
  9. 做了5年研发效能度量,我的6点思考
  10. 远程ntp服务器响应模式6查询,H3C WP5048无线PoE注入器 命令参考-Release 2208-6W100
  11. 一个曾讨厌英语的人是如何爱上英语学好英语的
  12. centos系统添加桌面图标
  13. 推荐 8 个高质量的公众号
  14. SSL_read: Failure in SSL library (protocol error?)
  15. 场曲 zemax示例(概念、校正)
  16. C语言之运算符练习题
  17. 面对 ESM 的开发模式,webpack 还有还手之力吗?(转载)
  18. QGIS | 解决打开ESRI *.mdb数据报错的问题
  19. 熊市定投,牛市才有收获
  20. javame j2me开发环境搭建要点,WTK安装。

热门文章

  1. 在zotero中利用better bibtex产生google scholar相同的citation key
  2. 适应各种工控组态软件的图库,一款常用的工控图库,包括3D按钮 、箭头、对角线、多边形、鼓风机、锅炉、工厂等多种图形
  3. 使用理想低通滤波器对图像进行处理显示
  4. 常用 XSS Payload
  5. linux设置环境变量设置环境变量
  6. numpy block创建分块矩阵
  7. 分布式矩阵和分布式kvm的区别
  8. 2021年材料员-通用基础(材料员)考试试题及材料员-通用基础(材料员)作业模拟考试
  9. ibm服务器三个硬盘一般raid,ibmx335/ibmx336服务器做RAID阵列的图文方法(包括删除RAID阵列)...
  10. 【权威榜单发布】CB Insights AI 100 - Jina AI 上榜啦!