但:
Public Sub New()
MyBase.New()
ButtonNative = New MyNativeWindow
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
ButtonNative.AssignHandle(Me.Button1.Handle)
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
中的"ButtonNative = New MyNativeWindow"的ButtonNative是如何东西!
Public Const WM_RBUTTONDOWN = &H204
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_RBUTTONDOWN Then
msgbox("屏蔽鼠标的右键")
Exit Sub
Else
MyBase.WndProc(m)
End If
End Sub
给你介绍一个类NativeWindow可以实现窗口过程的低级封装(只要提供窗口句柄)
1.你可以从NativeWindow派生一个类,重写其WndProc方法,代码如下:
Public Class MyNativeWindow
Inherits NativeWindow
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_LBUTTONDOWN = &H201
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_RBUTTONDOWN Then
Exit Sub
Else
MyBase.WndProc(m)
End If
End Sub
End Class
2.在自定义控件类中添加一个私有域private SubControlWindow as MyNativeWindow
3.在自定义控件类的初始化函数中初始化SubControlWindow,
并调用SubControlWindow.AssignHandle方法,参数为你向屏蔽消息的子控件句柄,
举例代码如下:
Public Sub New()
MyBase.New()
ButtonNative = New MyNativeWindow
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
ButtonNative.AssignHandle(Me.Button1.Handle)
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
这样你这要给定窗口句柄,就可以实现任何控件的消息低级封装了