Listview网格线问题

时间:2009-09-13 03:45:09

标签: winapi listview gridlines

使用常用控件在listview中绘制网格线时出现问题6.当我尝试向下滚动列表页面或使用鼠标向上翻页时会发生这种情况。

screenshot
(来源:rsdn.ru

我只能找到这个讨论http://www.ureader.com/msg/1484143.aspx,但解决方案并不完美

  1. LVS_EX_DOUBLEBUFFER对我不起作用
  2. 禁用平滑滚动对我不起作用
  3. 滚动无效确实有效,但闪烁不正确
  4. 禁用网格线确实有效,但没有它们,列表看起来不会很好。
  5. 还有其他选择吗? 谢谢!

5 个答案:

答案 0 :(得分:2)

ObjectListView - 一个简单的.NET WinForms ListView的开源包装器 - 修复了这个问题(还有很多其他问题)。

如果您想在自己的代码中修复它,则需要收听LVN_ENDSCROLL的反映通知。在结束滚动的处理程序中,执行以下操作:

protected void HandleEndScroll(ref Message m) {
    // There is a bug in ListView under XP that causes the gridlines to be 
    // incorrectly scrolled when the left button is clicked to scroll. 
    // This is supposedly documented at KB 813791, but I couldn't find it. 
    if (!ObjectListView.IsVista && 
        Control.MouseButtons == MouseButtons.Left &&
        this.GridLines) {
        this.Invalidate();
        this.Update();
    }
}

这有轻微的闪烁,但它比网格线完全混乱要好得多。

答案 1 :(得分:1)

我选择了子类listview并处理WM_VSCROLL消息:

  WORD x=LOWORD(wParam);
  if(iMsg==WM_VSCROLL && (x==SB_PAGEDOWN || x==SB_PAGEUP || x==SB_LINEDOWN || x==SB_LINEUP))
  {
    InvalidateRect(hDlg, 0, true);
    UpdateWindow(hDlg);
  }

答案 2 :(得分:0)

这是自2001年以来的Win32 Usenet常见问题解答,请参阅Google网上论坛:Win32 Listview,C代码(MS)

答案 3 :(得分:0)

我有一个从VB6转换为MS Vs2005的项目,当我从项目属性启用“启用XP视觉样式”时,它有同样的问题 - >应用设置。 然后我禁用了该功能,它解决了问题。

答案 4 :(得分:0)

你不能让控件无效并在用户完成滚动时重绘它吗?我不记得究竟该怎么做,但之前我遇到过类似的问题,这就是我如何处理它。