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;
        }

  • 相关阅读:
    idea 没有 persistence
    java 枚举(二) 级联关系
    java to edi 动态/静态映射
    edi to java
    C# 扩展方法
    最详细的C++对应C#的数据类型转换
    c# .Net随机生成字符串代码
    遍历结构体内部元素和值(Name and Value)
    寒假学习计划
    python os.path模块
  • 原文地址:https://www.cnblogs.com/skogkatt/p/4163376.html
Copyright © 2011-2022 走看看