Reputation: 43412
There's a problem with drawing gridlines in listview with common controls 6. It happens when I try to scroll the list page down or page up with mouse.
(source: rsdn.ru) .
I was only able to find this discussion http://www.ureader.com/msg/1484143.aspx, but the solutions are not perfect
Are there any other options? Thanks!
Upvotes: 4
Views: 2949
Reputation: 5531
Cant you just invalidate the control and have it redraw when it the user is done scrolling? I dont remember exactly how to do this, but I have had a similar problem before, and thats how I handled it.
Upvotes: 0
Reputation: 1
I have a project converted from VB6 to MS Vs2005, which has the same issue when I enable the "Enable XP visual style" from project properties -> Application setting. Then I disable the feature, and it fix the problem.
Upvotes: 0
Reputation:
It's a Win32 Usenet FAQ since 2001, see Google Groups : Win32 Listview , C code (MS)
Upvotes: 0
Reputation: 43412
I chose to subclass listview and process WM_VSCROLL message:
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);
}
Upvotes: 1
Reputation: 6882
ObjectListView -- a open source wrapper around a plain .NET WinForms ListView -- fixes this problem (and lots of others too).
If you want to fix it in your own code, you need to listen for reflected notification of LVN_ENDSCROLL
. In the handler for the end scroll, do something like this:
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();
}
}
There is a slight flicker with this, but it's much better than having the grid lines completely messed up.
Upvotes: 2