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:
HDN_BEGINTRACKwhen the user starts dragging a divider,
HDN_TRACKwhile dragging, and
HDN_ENDTRACKwhen the user has finished dragging the divider.
I've had no problem getting
HDN_ENDTRACK. Unfortunately, I didn't receive the
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
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 style flag.