VB中不需要注册窗口类。
而且回调函数LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)似乎在VB中也没有地方可写.

解决方案 »

  1.   

    '以下代码在VB6上测试通过
    Public Type WNDCLASSEX
        cbSize As Long
        style As Long
        lpfnWndProc As Long
        cbClsExtra As Long
        cbWndExtra As Long
        hInstance As Long
        hIcon As Long
        hCursor As Long
        hbrBackground As Long
        lpszMenuName As String
        lpszClassName As String
        hIconSm As Long
    End Type
    Public Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
    Public Declare Function RegisterClassEx Lib "user32" Alias "RegisterClassExA" (pcWndClassEx As WNDCLASSEX) As Integer
    Public Declare Function LoadIcon1 Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
    Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As String) As Long
    Public Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance As Long) As Long
    Public Const CS_HREDRAW = &H2
    Public Const CS_VREDRAW = &H1
    Public Const COLOR_WINDOW = 5Function myWndProc(HWND As Long, WM As Long, W As Long, L As Long) As LongEnd FunctionFunction WndProcToLong(ByVal lpWndProc As Long) As Long
        WndProcToLong = lpWndProc
    End FunctionFunction MyRegisterClass(hInstance As Long) As Integer
        Dim wcex As WNDCLASSEX
        wcex.cbSize = 48      'sizeof(WNDCLASSEX)
        wcex.style = CS_HREDRAW Or CS_VREDRAW
        wcex.lpfnWndProc = WndProcToLong(AddressOf myWndProc)
        wcex.cbClsExtra = 0
        wcex.cbWndExtra = 0
        wcex.hInstance = hInstance
        wcex.hIcon = LoadIcon(hInstance, "IDI_SOCKSEVER")
        wcex.hCursor = LoadCursor(hInstance, "IDC_ARROW")
        wcex.hbrBackground = COLOR_WINDOW + 1
        wcex.lpszMenuName = "IDC_SOCKSEVER"
        wcex.lpszClassName = "VB6WindowClass"
        wcex.hIconSm = LoadIcon(wcex.hInstance, "IDI_SMALL")
        MyRegisterClass = RegisterClassEx(wcex)
    End FunctionSub main()
    Dim lClass As Long
    lClass = MyRegisterClass(App.hInstance)
    If lClass <> 0 Then
       MsgBox "success"
    Else
       MsgBox "fail"
    End If'.....If lClass <> 0 Then
        Call UnregisterClass("VB6WindowClass", App.hInstance)
    End If
    End Sub