【问题标题】:How to paint a custom message on an empty listview control如何在空的列表视图控件上绘制自定义消息
【发布时间】:2014-02-16 00:49:09
【问题描述】:

我试图编写一个继承 ListView 控件的自定义类。到目前为止,我已经添加了一个 OnDrawItem、OnDrawSubItem 和 OnDrawColumnHeader 事件,它允许我绕过标准的 windows 绘图来做一些自定义的事情。

我的控件几乎是我想要实现的 100%,但是,它的最后一部分是向空的 ListView 控件添加自定义消息 - 这是我正在努力解决的问题。尽可能多地阅读听起来我需要添加一个过程来捕获 NM_CUSTOMDRAW 事件并自己做一些绘画(我可能是错的)。基本上,只要我尝试绘制背景,它就会关闭列表项的所有绘制。

由于我对此不是很熟悉,是否有人能够提供一个小示例或提供一些信息的链接,这些信息可能会为我解决这个问题。

我添加了一个 'Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)' 调用来捕获 WM_NOTIFY 消息,但我不确定我是否要进入正确的方向。

我希望简单地在背景上打印一条自定义消息(当为空时)而不影响控件的任何其他绘图。

这可能吗? 任何帮助将不胜感激。谢谢

【问题讨论】:

  • 你没有朝着正确的方向前进。一个简单的解决方案是在列表视图的顶部放置一个标签,如果列表视图为空,则将其 Visible 属性设置为 True。
  • 还有一个OnPaintBackground(和OnPaint),在那里你可以做你想做的事。 NM_CUSTOMDRAW 不是事件也不是消息,而是 lParam 部分,它是指向 NMLVCUSTOMDRAW 结构的指针。
  • 感谢 Plutonix。你介意再详细说明一下吗?

标签: vb.net listview


【解决方案1】:

您可以通过覆盖WndProc 方法并检查WM_PAINT 消息来实现此目的。

Public Class UIListView
    Inherits ListView

    Private Sub WmPaint(ByRef m As Message)
        MyBase.WndProc(m)
        Const text As String = "ListView is empty..."
        Using g As Graphics = Me.CreateGraphics()
            Using f As New StringFormat()
                Using b As New SolidBrush(Me.ForeColor)
                    f.Alignment = StringAlignment.Center
                    f.LineAlignment = StringAlignment.Center
                    g.DrawString(text, Me.Font, b, Me.DisplayRectangle, f)
                End Using
            End Using
        End Using
    End Sub

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If ((m.Msg = WM_PAINT) AndAlso (Me.Items.Count = 0)) Then
            Me.WmPaint(m)
        Else
            MyBase.WndProc(m)
        End If
    End Sub

    Private Const WM_PAINT As Integer = 15

End Class

【讨论】:

  • 感谢 Bjorn...这正是我想要的。现在唯一的问题是 1) 设计器视图在使用列表视图时变得非常糟糕 2) 在我移动窗口然后它们出现之前,它最初不会绘制列标题。除此之外,效果很好!
  • @user2185200 啊……我没有用列进行测试。我做了一些小的改动。请查看我的编辑。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多