我试图编写一个继承ListView控件的自定义类。到目前为止,我已经添加了OnDrawItem,OnDrawSubItem和OnDrawColumnHeader事件,该事件使我可以绕过标准Windows绘图来执行一些自定义操作。
我的控件几乎是我要实现的目标的100%,但是,它的最后一部分是向空的ListView控件中添加自定义消息-这是我在努力的目标。尽可能多地阅读,听起来我需要添加一个过程来捕获NM_CUSTOMDRAW事件并自己做点画(我可能是错的)。基本上,一旦我尝试绘制背景,它就会关闭列表项的所有绘制。
因为我对此不太熟悉,所以有人可以提供一个小例子或提供一些信息的链接,这些信息可能可以帮助我解决这个问题。
我添加了一个“受保护的重写子WndProc(由System.Windows.Forms.Message传递的ByRef m)”调用以捕获WM_NOTIFY消息,但是我不确定是否朝着正确的方向前进。
我希望仅在背景上(空时)打印自定义消息,而不影响控件的其他任何图形。
这可能吗?任何帮助将不胜感激。谢谢
您可以通过重写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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句