• HDN_TRACK and HDS_FULLDRAG


    I'm posting this, because it took me two hours to find the issue.

    I wanted to customize a listview's header control, i.e. changing its behavior when the user resizes a column. According to the MSDN documentation, the header sends following notifications:

    I've had no problem getting HDN_BEGINTRACK and HDN_ENDTRACK. Unfortunately, I didn't receive the HDN_TRACK notification.

    I've found many examples in the internet, which, instead of HDN_TRACK, intercepted the HDN_ITEMCHANGING notification. Well, after some more research, I've found a hint to the header control's style HDS_FULLDRAG, which causes the control to render its content while being resized. If this style is set, no HDN_TRACK notifications are sent. And the System.Windows.Forms.ListView's header has this style by default. That's ok, but what's not ok is that nowhere in the MSDN the relation between HDN_TRACK and HDS_FULLDRAG is documented.

    I hope that if someone stumbles over this issue, Google will refer him to here. It would save him some time.

    Update: I've got a request from Martin Welker, who asked how to remove HDS_FULLDRAG. I've found the article INFO: HDN_TRACK Notifications and Full Window Drag Style in the Microsoft Knowledge Base:

    SUMMARY
    Starting with version 4.70 of ComCtl32.dll, the header control of a list view control in report view (LVS_REPORT) automatically receives the HDS_FULLDRAG style. When this style is set, the parent of a list view control receives HDN_ITEMCHANGING notifications, rather than HDN_TRACK notifications, when the column divider of the header control is dragged. To receive HDN_TRACK notifications, the header control of the list view control must not have the HDS_FULLDRAG style set. Note that the HDS_FULLDRAG style is ignored in versions of ComCtl32.dll prior to 4.70.

    This article also includes some sample code how to remove the HDS_FULLDRAG flag.

  • 相关阅读:
    Django 各个 app 存放在同一文件夹下
    Django 的登录验证装饰器
    001语言基础
    004 系列:元组,列表和字符串
    003数值类型
    002程序流程控制
    WPF事件
    C++中extern关键字的作用
    C/C++中extern关键字详解
    运算符重载,是成员函数还是友元函数
  • 原文地址:https://www.cnblogs.com/csuchao/p/1766996.html
Copyright © 2020-2023  润新知