如何在Win32 ListView控件中禁用垂直标题跟踪行

时间:2018-03-09 17:21:47

标签: windows listview winapi

我正在自定义Win32 ListView控件,我想删除在调整标题大小时自动绘制的垂直线。我在谈论行区域中绘制的线而不是标题。可以通过处理 HDN_TRACK 通知并更改通知数据中的cxy值来限制垂直跟踪线,但似乎无法限制或删除行区域中的垂直跟踪线。任何人都有关于如何删除/隐藏/限制该行的任何想法?

enter image description here

上面的截图是在我跟踪标题

时拍摄的

1 个答案:

答案 0 :(得分:1)

删除该行只会使用户更难使用该控件!

简单方法可能是启用visual styles / comctl32 v6,它似乎使用实时调整大小,但这可能取决于所选主题/风格。

我能够为经典控件提出一个丑陋的黑客攻击:

HWND hLV = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL, WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|LVS_REPORT, ...);
SendMessage(hLV, CCM_SETVERSION, 5, 0); // <--- Important

...

case WM_NOTIFY:
{
HWND hLV = ...;
NMHDR&nmh = *(NMHDR*) lparam;
switch(nmh.code)
{
case HDN_BEGINTRACKA:case HDN_BEGINTRACKW:
  LockWindowUpdate(hLV); // Block all drawing in the listview
  return false;
case HDN_ENDTRACKA:case HDN_ENDTRACKW:
  LockWindowUpdate(NULL);
  return false;
}

这可能是depend on the HDS_FULLDRAG header style,您可能不希望在启用视觉样式时执行此操作。