说说 HWND_TOP 和 HWND_TOPMOST 的区别
初看上去,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 的区别相关推荐
- 窗口置顶(置于桌面所有程序之上)VC/MFC 怎么将窗口置顶
软件界面全屏显示后,需要把窗体置于其他桌面程序之上,但总是置于其他弹出框之下,会造成用户忽略了导致用户不明什么原因. 百度查了好多方法总是失败. 后来查到了CSND的一个帖子http://bbs.cs ...
- delphi控件使用
Standard页 1- Tlistbox控件 重要属性items.* 举例,界面设计如下左,执行结果如下右: 代码为 procedure TForm1.Button1Click(Sende ...
- mfc让图片与按钮一起_MFC 基础知识:对话框背景添加图片和按钮Button添加图片...
很长时间没有看MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识.的确,任 // TODO: 在此添加额外的初始化代 ...
- MFC 基础知识:对话框背景添加图片和按钮Button添加图片
很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识.的确,任何知识一段时间过后都比较容易忘记,但回顾 ...
- MFC开发IM-自绘按钮控件,给按钮设置背景图片
MFC 基础知识:对话框背景添加图片和按钮Button添加图片 很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回 ...
- 窗口取消置顶后被父窗口挡住,HWND_TOPMOST与HWND_NOTOPMOST踩坑记录
遇到问题 使用 ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); ::SetWindowPos(hwnd ...
- MoveWindow() SetWindowPos()的区别与联系
敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
最新文章
- Oracle索引失效问题
- 活动 | PMcaff大讲堂预告:听CRM大神教你玩转CRM
- 释放虚拟GPU力量 NVIDIA 加速企业远程办公生产力变革
- delphi 点击wsdl出不了描述文件_iOS 13 公测版来了,安装公测版官方描述文件
- ffmpeg处理hikvision平台PS流
- 基于python+django房屋租赁管理系统pycharm源码lw
- Matlab的复共轭转置
- flac音乐格式怎么转换mp3?
- 做了5年研发效能度量,我的6点思考
- 远程ntp服务器响应模式6查询,H3C WP5048无线PoE注入器 命令参考-Release 2208-6W100
- 一个曾讨厌英语的人是如何爱上英语学好英语的
- centos系统添加桌面图标
- 推荐 8 个高质量的公众号
- SSL_read: Failure in SSL library (protocol error?)
- 场曲 zemax示例(概念、校正)
- C语言之运算符练习题
- 面对 ESM 的开发模式,webpack 还有还手之力吗?(转载)
- QGIS | 解决打开ESRI *.mdb数据报错的问题
- 熊市定投,牛市才有收获
- javame j2me开发环境搭建要点,WTK安装。
热门文章
- 在zotero中利用better bibtex产生google scholar相同的citation key
- 适应各种工控组态软件的图库,一款常用的工控图库,包括3D按钮 、箭头、对角线、多边形、鼓风机、锅炉、工厂等多种图形
- 使用理想低通滤波器对图像进行处理显示
- 常用 XSS Payload
- linux设置环境变量设置环境变量
- numpy block创建分块矩阵
- 分布式矩阵和分布式kvm的区别
- 2021年材料员-通用基础(材料员)考试试题及材料员-通用基础(材料员)作业模拟考试
- ibm服务器三个硬盘一般raid,ibmx335/ibmx336服务器做RAID阵列的图文方法(包括删除RAID阵列)...
- 【权威榜单发布】CB Insights AI 100 - Jina AI 上榜啦!