zoukankan      html  css  js  c++  java
  • 全脑瘫IT时代(五)

    Windows 7 有一个臭名卓著的bug。什么?你不知道?只要搜“windows7 explorer double click scroll”,排在结果第一的就是。

    OK, let's show it.

    运行资源管理器,展开一些文件夹,让左边的树列表滚动条充满,找一个子文件夹比较多的文件夹,就比如c:\windows,双击windows,很大概率滚动条跑到上面去了,你双击的文件夹被放在了屏幕最下面。

    我们双击一个文件夹展开它基本上是因为我们想看到它的子文件夹,如今却被滚动到看不到的位置,每次双击都要手工去调整滚动条的位置。

    这是一个几乎每天都会遇到,甚至可以说是如影随形的bug,但是却一直没有被修正(注意只有windows7才有这个问题)。

    Update,现在有一个解决办法,使用开源的 Classic Shell:

    CodeProject

    SourceForge

    问题的原因:

    Explorer 向 TreeView 发送了两次 TVM_ENSUREVISIBLE,第一次发送给顶层Item,第二次发送给选中的Item。发送给顶层是没有什么意义的,这导致了bug,但是不知道微软这样做的意义。

    解决的办法可以参考 Classic Shell 的源代码,ExplorerBHO.cpp line 39:

        if (uMsg==TVM_ENSUREVISIBLE && (dwRefData&1))
        {
            // HACK! there is a bug in Win7 Explorer and when the selected folder is expanded for the first time it sends TVM_ENSUREVISIBLE for
            // the root tree item. This causes the navigation pane to scroll up. To work around the bug we ignore TVM_ENSUREVISIBLE if it tries
            // to show the root item and it is not selected
            HTREEITEM hItem=(HTREEITEM)lParam;
            if (!TreeView_GetParent(hWnd,hItem) && !(TreeView_GetItemState(hWnd,hItem,TVIS_SELECTED)&TVIS_SELECTED))
                return 0;
        }

  • 相关阅读:
    C#的委托
    解决.net core3.1使用docker部署在Ubuntu上连接sqlserver报error:35的问题
    【WPF学习】第三十六章 样式基础
    asp.net core 3.x 身份验证-3cookie身份验证原理
    C#设计模式学习笔记:(9)组合模式
    Asp.net Core MVC(三)UseMvc设置路由
    C#后台异步消息队列实现
    ASP.NET CORE 内置的IOC解读及使用
    VS2015发布WEB项目
    C#的冒泡排序
  • 原文地址:https://www.cnblogs.com/skogkatt/p/4163376.html
Copyright © 2011-2022 走看看