VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之Visual Basic .NET子类化的实现

Visual Basic .NET子类化的实现(相关vb.net教程)
.NET中使用子类化技术要比VB6中简单,因为微软在.NET中已经提供了接口,不需要我们再自己SetWindowLong了,我们做的是Overrides(覆盖) WndProc过程即可。
Overrides Protected Sub WndProc( ByRef m As Message )参数m实现了Windows的消息类型。
下面的例子将演示如何将About加入窗口的系统菜单。
①创建工程
创建一个VB.NET的Windows Application工程。
②录入代码
Public Class Form1
 
    Inherits System.Windows.Forms.Form
 
    '中间隐去了.NET自动生成的代码
    ' – 引用Win32Api
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Int32) As Int32
    Private Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Int32, ByVal nPosition As Int32, ByVal wFlags As Int32, ByVal wIDNewItem As Int32, ByVal lpNewItem As String) As Int32
 
    Private Const MF_BYCOMMAND = &H0&
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_STRING = &H0&
    Private Const MF_SEPARATOR = &H800&
    Private Const WM_SYSCOMMAND = &H112
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        InsertMenu(GetSystemMenu(Me.Handle, False), 0, MF_BYPOSITION Or MF_SEPARATOR, 2001, "") '加入一条分割线
 
        'GetSystemMenu(Me.Handle, False)是得到系统菜单的句柄,第二个参数为True的话不能改变系统菜单,所以要设为False
        InsertMenu(GetSystemMenu(Me.Handle, False), 0, MF_BYPOSITION Or MF_STRING, 2002, "About Me(&A)") '加入About me菜单在系统菜单中
 
    End Sub
 
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        '类化窗口--覆盖WndProc过程
 
        If m.Msg = WM_SYSCOMMAND Then
            If m.WParam.ToInt32 = 2002 Then
                MsgBox("About Context", vbInformation, "About...")
            End If
        End If
 
        '调用窗口默认的处理过程
        MyBase.WndProc(m)
 
    End Sub
 
End Class
4. 小结
  子类化技术可以让我们实现一些使用VB在正常条件下无法完成的任务,而且通过这些技术可以更为深入的学习Windows编程,成为VB

相关教程