蝎子

有时候,你会发现这么一个现象:点击任务栏上的一个空白按钮后,这个按钮就消失不见了。这是为什么呢?在MSDN上,有一篇文章《some basic rules on which windows go into the taskbar》做了些介绍,简而言之:> 如果一个窗口设置了WS_EX_APPWINDOW风格,则它会显示在任务栏上。> 如果一个窗口是顶级且未被拥有的,则它会显示在任务栏上。> 其他的所有情况,都不会显示在任务栏上。

(尽管ITaskbarList接口把事情搞得有些复杂),当一个任务栏可感知(taskbar-eligible)窗口变为可见状态时,任务栏将会为这个窗口创建一个按钮。当它变为隐藏状态时,任务栏会移除这个按钮。如果窗口的状态处于任务栏可感知(taskbar-eligible)和任务栏不可感知(taskbar-ineligible)这两种状态之间时,当这个窗口是可见时,则一个空白的按钮会显示在任务栏上。

考虑以下行为模式

> 窗口是任务栏可感知的。> 窗口如果变为可见状态,则任务栏按钮创建。> 窗口变成了任务栏不可感知的。> 窗口变成了不可见状态,因为此时窗口不是任务栏可感知的,所以任务栏忽略了这个变化。

造成的结果

在任务栏会出现一个没有挂接到任何窗口的按钮。这个也是文档会这样建议:”如果你希望将一个窗口的风格进行动态的设置为一个不支持任务栏按钮的风格,你必须先将窗口进行隐藏(通过传入SW_HIDE到ShowWindow中),然后修改窗口的风格,最后显示窗口。”

问题来了

为什么任务栏不对所有窗口的显示和隐藏进行监控呢?

答案

因为这个操作是十分昂贵的。
过滤出不符合任务栏条件的窗口这一动作发生在USER32模块内部,只有当任务栏符合条件的窗口的状态发生了变化,它就通过HSHELL*通知消息来通知任务栏(或任何安装了WH_SHELL钩子的组件)。这样,任务栏代码就不会在没有任何事情可做的情况下被页换入(paged in)。

总结

这里面的状态交互,还挺复杂的哈。等会儿,让我把这事儿给缕缕。。。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What’s with those blank taskbar buttons that go away when I click on them?》

sw接口是什么意思啊_为什么有些任务栏上的按钮一点就消失了相关推荐

  1. 工具栏的打印图标不见了_我的电脑右下角任务栏上打印机小图标不见了, – 手机爱问...

    2019-01-21 XP无法添加打印机,点击添加打印机没任何反应, 系统无法添加打印机之谜 ?在与打印机长期接触的日子里,相信你可能会遇到这样的一种现象,那就是每次用鼠标双击打印机列表界面中的&qu ...

  2. 双离合档把上按钮作用_大众车自动档档把上的按钮是干什么用的?

    展开全部 现在的自动挡车型一般都会32313133353236313431303231363533e78988e69d8331333431353366有手动换挡模式,但有不少朋友几乎从买车开始到现在都 ...

  3. centos usb转网口_如何将USB接口打印机转换成RJ45网口并安装到打印服务器上共享使用?...

    如何将USB接口打印机转换成RJ45网口并安装到打印服务器上共享使用? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者 https://blog. ...

  4. 接口返回数据太大_阿里工程师教你 3 分钟实现数据源编排和接入

    作者| 阿里文娱高级开发工程师 天甘 慕理 责编 | 屠敏 头图 | CSDN 下载自东方 IC 背景 你一定也深有同感,在开发业务需求时,1/3是时间都花费在了前期准备工作上.比如,调研数据来自哪里 ...

  5. layui图片上传按钮按着没反应_关于layui动态生成文件上传按钮后点击无效的解决办法...

    首先,这是一个坑,大坑,网上一大堆写的云里雾里,不知所以,转了一圈,除了copy就是copy,Jesus God,花了一晚上,走通了这个坑,话不多说,直接解决 layui版本: layui-v2.5. ...

  6. formdata上传文件_大文件分片断点上传实现思路以及方案

    作者:yeyan1996| 来源:掘金https://juejin.im/post/5dff8a26e51d4558105420ed 前言 我在面试的时候确实被问到了这个问题,而且是一道在线 codi ...

  7. adb shell 小米手机_如何在Android手机上进行自动化测试

    前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:///的内容 如何便捷地在脚本中调用ADB指令或Android专属接口连接 ...

  8. qt按钮禁用和激活禁用_为什么试探法只是经验法则:禁用按钮的情况

    qt按钮禁用和激活禁用 Most user experience designers will be familiar with Jackob Nielsen's 10 usability heuri ...

  9. 腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频

    不管这个腾讯视频好用与否,都有一大批用户,本文播放器家园网小编分享腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频.VIP会员频道聚合海量VIP品质内容,连续签到解锁惊喜奖励.摇一摇抽VIP ...

最新文章

  1. while (true) 和 for (;;) 到底哪个更快?
  2. 读书 | 一切红利最终都是趋势红利
  3. python 反复访问迭代器iter,反复使用next
  4. Java常用设计模式————单例模式
  5. python已知有列表_python 列表常用方法
  6. 使用trycatch获取异常问题
  7. git基本使用知识点总结
  8. js书写原生ajax,javascript原生ajax写法
  9. Linux【环境部署 02】yum源镜像下载+挂载镜像+本地yum源配置+局域网yum源服务搭建+局域网yum源使用(一篇学会离线yum源配置)
  10. Django模板实现地址的省市县三级联动
  11. C++编程常见问题—error: passing ‘const std::map<>]‘ discards qualifiers
  12. 设置bing为chrome的默认搜索引擎
  13. postgres 坐标_用postgreSQL做基于地理位置的app(zz)
  14. 工程总承包(EPC)最高投标限价政策解说
  15. android tablayout放图片,Android TabLayout的Indicator如何设置为图片
  16. ES异常 : Validation Failed: 1: no requests added
  17. php 自定义生成短链工具
  18. [Spark的二次排序的实现]
  19. 2021年最新调查:86% 的 Java 开发人员 依赖 Spring 框架
  20. 服务器异地备份共享文件夹方法,mssql数据库异地备份的两种方法

热门文章

  1. 一致性协议raft详解(三):raft中的消息类型
  2. php 机数,PHP实现自动刷数和“灌水”机
  3. mysql max_allowed_packet查询和修改
  4. 红黑树(RB-Tree)比AVL强在哪?
  5. 数据结构——绪论以及线性表的顺序表示
  6. C语言:L1-033 出生年 (15分)(解题报告)
  7. linux-RPM与YUM
  8. php 根据坐标计算范围内,php计算经纬度是否在区域内
  9. ios 获取沙盒文件名_获取IOS各种沙盒路径的方法
  10. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...