1

如何在我的列表视图中只显示垂直网格线,而不显示水平网格线?例如在任务管理器中?有没有办法用 GDI 做到这一点?我不知道我怎么能意识到,每一个有用的评论都会受到赞赏:)

4

1 回答 1

0

当你和我创建控件时,我们通常会重载 onPaint 方法并在那里进行所有绘制。但是,您在工具箱中找到的大多数默认控件都会在某些消息处重绘某些部分,这使得在它们上绘制变得困难,因为您永远不知道控件何时重绘。然而,这样做是可能的,而确定何时绘制的唯一方法是通过跟踪和错误。

如果幸运的话,在几个事件中重绘就足够了,但是,在大多数情况下,重载 WndProc 方法是可行的方法。

我目前在一台 Windows 8 计算机上,根本没有绘制网格线,所以很难写一个如何删除水平线的好例子,但我只是用背景颜色在它们上面画然后再画垂直的。下面的代码绘制水平网格线:

Public Class MyListView
Inherits ListView

Private Sub DrawLines() Handles Me.MouseUp
    Dim G = CreateGraphics()
    Dim x As Integer

    For i = 0 To Columns.Count - 1
        x += Columns(i).Width
        G.DrawLine(New Pen(Color.FromArgb(230, 230, 230)), x, 0, x, Height)
    Next
End Sub

Protected Overrides Sub WndProc(ByRef m As Message)
    MyBase.WndProc(m) ' To prevent something from drawing you can simply not do this call at a specific message
End Sub

End Class

Windows 消息列表

Spy++ 也有助于找到正确的消息

于 2014-03-03T02:43:13.767 回答