VB 利用API创建窗体的模块代码

Public   Declare   Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
Public Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As StringByVal hInstance As LongAs Long
Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As LongByVal wMsg As LongByVal wParam As LongByVal lParam As LongAs Long
Public Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As Msg, ByVal hwnd As LongByVal wMsgFilterMin As LongByVal wMsgFilterMax As LongAs Long
Public Declare Function TranslateMessage Lib "user32" (lpMsg As Msg) As Long
Public Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As Msg) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As LongByVal nCmdShow As LongAs Long
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As LongByVal lpCursorName As Any) As Long
Public Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As LongByVal lpIconName As StringAs Long
Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As LongByVal lpClassName As StringByVal lpWindowName As StringByVal dwStyle As LongByVal x As LongByVal y As LongByVal nWidth As LongByVal nHeight As LongByVal hWndParent As LongByVal hMenu As LongByVal hInstance As Long, lpParam As Any) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As LongByVal hwnd As LongByVal Msg As LongByVal wParam As LongByVal lParam As LongAs Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongByVal nIndex As LongByVal dwNewLong As LongAs Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongByVal nIndex As LongAs Long
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As LongByVal lpText As StringByVal lpCaption As StringByVal wType As LongAs Long
Public Declare Sub PostQuitMessage Lib "user32" (ByVal nExitCode As Long)


Public Type WNDCLASS
    style 
As Long
    lpfnwndproc 
As Long
    cbClsextra 
As Long
    cbWndExtra2 
As Long
    hInstance 
As Long
    hIcon 
As Long
    hCursor 
As Long
    hbrBackground 
As Long
    lpszMenuName 
As String
    lpszClassName 
As String
End Type


Public Type POINTAPI
    x 
As Long
    y 
As Long
End Type


Public Type Msg
    hwnd 
As Long
    message 
As Long
    wParam 
As Long
    lParam 
As Long
    time 
As Long
    pt 
As POINTAPI
End Type

Public Const CS_VREDRAW = &H1
Public Const CS_HREDRAW = &H2

Public Const CW_USEDEFAULT = &H80000000

Public Const ES_MULTILINE = &H4&

Public Const WS_BORDER = &H800000
Public Const WS_CHILD = &H40000000
Public Const WS_OVERLAPPED = &H0&
Public Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME
Public Const WS_SYSMENU = &H80000
Public Const WS_THICKFRAME = &H40000
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)

Public Const WS_EX_CLIENTEDGE = &H200&

Public Const COLOR_WINDOW = 5

Public Const WM_DESTROY = &H2
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202

Public Const IDC_ARROW = 32512&

Public Const IDI_APPLICATION = 32512&

Public Const GWL_WNDPROC = (-4)

Public Const SW_SHOWNORMAL = 1

Public Const MB_OK = &H0&
Public Const MB_ICONEXCLAMATION = &H30&


'声明几个我们需要的变量、常量:

Public Const gClassName = "MyClassName"
Public Const gAppName = "My Window Caption"

Public gButOldProc As Long 
Public gHwnd As Long, gButtonHwnd As Long, gEditHwnd As Long

 'Powered by barenx

'入口函数:

'Sub Main

'代码如下:

Public Sub Main()

   
Dim wMsg As Msg

   
''Call procedure to register window classname. If false, then exit.
   If RegisterWindowClass = False Then Exit Sub
    
      
''Create window
      If CreateWindows Then
         
''Loop will exit when WM_QUIT is sent to the window.
         Do While GetMessage(wMsg, 0&0&0&)
            
''TranslateMessage takes keyboard messages and converts
            ''them to WM_CHAR for easier processing.
            Call TranslateMessage(wMsg)
            
''Dispatchmessage calls the default window procedure
            ''to process the window message. (WndProc)
            Call DispatchMessage(wMsg)
         
Loop
      
End If

    
Call UnregisterClass(gClassName$, App.hInstance)


End Sub


Public Function RegisterWindowClass() As Boolean

    
Dim wc As WNDCLASS
    
    
    wc.style 
= CS_HREDRAW Or CS_VREDRAW
    wc.lpfnwndproc 
= GetAddress(AddressOf WndProc) ''Address in memory of default window procedure.
    wc.hInstance = App.hInstance
    wc.hIcon 
= LoadIcon(0&, IDI_APPLICATION) ''Default application icon
    wc.hCursor = LoadCursor(0&, IDC_ARROW) ''Default arrow
    wc.hbrBackground = COLOR_WINDOW ''Default a color for window.
    wc.lpszClassName = gClassName$

    RegisterWindowClass 
= RegisterClass(wc) <> 0
    
End Function

Public Function CreateWindows() As Boolean
  
    
''开始创建窗体

'主窗体.
    gHwnd& = CreateWindowEx(0&, gClassName$, gAppName$, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 2081500&0&, App.hInstance, ByVal 0&)
    
''创建一个按钮
    gButtonHwnd& = CreateWindowEx(0&"Button""Click Here", WS_CHILD, 58908525, gHwnd&0&, App.hInstance, 0&)
    
''创建一个(WS_EX_CLIENTEDGE、ES_MULTILINE风格的TextBox
    gEditHwnd& = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit""This is the edit control." & vbCrLf & "As you can see, it's multiline.", WS_CHILD Or ES_MULTILINE, 0&0&20080, gHwnd&0&, App.hInstance, 0&)

'"Button ","Edit"系统中已经注册过了所以这里直接用 
'
    创建完别忘了显示出来否则是隐藏的

    
Call ShowWindow(gHwnd&, SW_SHOWNORMAL)
    
Call ShowWindow(gButtonHwnd&, SW_SHOWNORMAL)
    
Call ShowWindow(gEditHwnd&, SW_SHOWNORMAL)

'记下按钮处理过错的当前所在地址    

gButOldProc
& = GetWindowLong(gButtonHwnd&, GWL_WNDPROC)
    
    
    
''Set default window procedure of button to ButtonWndProc. Different
    ''settings of windows is listed in the MSDN Library. We are using GWL_WNDPROC
    ''to set the address of the window procedure.

'指向新的处理过程地址
    Call SetWindowLong(gButtonHwnd&, GWL_WNDPROC, GetAddress(AddressOf ButtonWndProc))

    CreateWindows 
= (gHwnd& <> 0)
    
End Function


'窗体运行的主函数,在注册这个窗体时已经指定的
Public Function WndProc(ByVal hwnd As LongByVal uMsg As LongByVal wParam As LongByVal lParam As LongAs Long

    
Dim strTemp As String

'处理消息,这里指处理了WM_DESTROY消息

    
Select Case uMsg&
       
Case WM_DESTROY:
          
''Since DefWindowProc doesn't automatically call
          ''PostQuitMessage (WM_QUIT). We need to do it ourselves.
          ''You can use DestroyWindow to get rid of the window manually.
          Call PostQuitMessage(0&)
    
End Select
    

  
''Let windows call the default window procedure since we're done.
  WndProc = DefWindowProc(hwnd&, uMsg&, wParam&, lParam&)

End Function


'又添加了一个Button的处理过程

Public Function ButtonWndProc(ByVal hwnd As LongByVal uMsg As LongByVal wParam As LongByVal lParam As LongAs Long

    
Select Case uMsg&
       
Case WM_LBUTTONUP:
          
Call MessageBox(gHwnd&"You clicked the button!", App.Title, MB_OK Or MB_ICONEXCLAMATION)
    
End Select
    
  ButtonWndProc 
= CallWindowProc(gButOldProc&, hwnd&, uMsg&, wParam&, lParam&)
   
End Function



Public Function GetAddress(ByVal lngAddr As LongAs Long
    GetAddress 
= lngAddr&
End Function


 

你可能感兴趣的:(VB老皇历,vb,api,function,user,string,application)