http://www.dapha.net/vb/download.asp?downid=1&id=1821
使用API函建立窗口 
文件版本:  无图片 
文件类型: 窗口界面 
文件性质: Win9x/WinNT/Win2000/WinME 
授权方式: 共享软件 
文件大小: K 
文件评分:  
入库日期: 2002-4-29 
相关链接: 主页 
本日下载: 1  本周:16  总计:16 
本地下载 下载  
软件简介: 不是VB自生成的窗口哦。全部使用API函数

解决方案 »

  1.   

    '有,有按钮和文本框,刚找到的。以下是一个模块
    Option ExplicitPublic Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
    Public Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance As Long) As Long
    Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As Msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As 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 Long, ByVal nCmdShow As Long) As Long
    Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Any) As Long
    Public Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
    Public Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As 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 TypePublic Const CS_VREDRAW = &H1
    Public Const CS_HREDRAW = &H2Public Const CW_USEDEFAULT = &H80000000Public 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 = 5Public Const WM_DESTROY = &H2
    Public Const WM_LBUTTONDOWN = &H201
    Public Const WM_LBUTTONUP = &H202Public Const IDC_ARROW = 32512&Public Const IDI_APPLICATION = 32512&Public Const GWL_WNDPROC = (-4)Public Const SW_SHOWNORMAL = 1Public Const MB_OK = &H0&
    Public Const MB_ICONEXCLAMATION = &H30&
    Public Const gClassName = "MyClassName"
    Public Const gAppName = "My Window Caption"
      

  2.   

    '接上Public gButOldProc As Long ''Will hold address of the old window proc for the button
    Public gHwnd As Long, gButtonHwnd As Long, gEditHwnd As Long ''You don't necessarily need globals, but if you're planning to gettext and stuff, then you're gona have to store the hwnds.
    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 SubPublic Function RegisterWindowClass() As Boolean    Dim wc As WNDCLASS
        
        ''Registers our new window with windows so we
        ''can use our classname.
        
        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
      
        ''Create actual window.
        gHwnd& = CreateWindowEx(0&, gClassName$, gAppName$, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 208, 150, 0&, 0&, App.hInstance, ByVal 0&)
        ''Create button
        gButtonHwnd& = CreateWindowEx(0&, "Button", "Click Here", WS_CHILD, 58, 90, 85, 25, gHwnd&, 0&, App.hInstance, 0&)
        ''Create textbox with a border (WS_EX_CLIENTEDGE) and make it multi-line (ES_MULTILINE)
        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&, 200, 80, gHwnd&, 0&, App.hInstance, 0&)    
        ''Since windows are hidden, show them. You can use UpdateWindow to
        ''redraw the client area.
        Call ShowWindow(gHwnd&, SW_SHOWNORMAL)
        Call ShowWindow(gButtonHwnd&, SW_SHOWNORMAL)
        Call ShowWindow(gEditHwnd&, SW_SHOWNORMAL)
        
        ''Get the memory address of the default window
        ''procedure for the button and store it in gButOldProc
        ''This will be used in ButtonWndProc to call the original
        ''window procedure for processing.
        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 Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long  ''This our default window procedure for the window. It will handle all
      ''of our incoming window messages and we will write code based on the
      ''window message what the program should do.  Dim strTemp As String    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
    Public Function ButtonWndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    Select Case uMsg&
           Case WM_LBUTTONUP:
              ''Left mouse button went up (user clicked the button)
              ''You can use WM_LBUTTONDOWN for the MouseDown event.
              
              ''We use the MessageBox API call because the built in
              ''function 'MsgBox' stops thread processes, which causes
              ''flickering.
              Call MessageBox(gHwnd&, "You clicked the button!", App.Title, MB_OK Or MB_ICONEXCLAMATION)
        End Select
        
      ''Since in MyCreateWindow we made the default window proc
      ''this procedure, we have to call the old one using CallWindowProc
      ButtonWndProc = CallWindowProc(gButOldProc&, hwnd&, uMsg&, wParam&, lParam&)
       
    End Function
    Public Function GetAddress(ByVal lngAddr As Long) As Long
        ''Used with AddressOf to return the address in memory of a procedure.    GetAddress = lngAddr&
        
    End Function
      

  3.   

    函数 CreateWindow:  函数功能:该函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。该函数也指定该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。若要使用除CreateWindow函数支持的风格外的扩展风格,则使用CreateWindowEx函数代替CreateWindow函数。    函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);    参数:    lpClassName:指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。    如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。请看说明部分的列表。    LPWindowName:指向一个指定窗口名的空结束的字符串指针。    如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。    dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义:    WS_BORDER:创建一个单边框的窗口。    WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。    WS_CHIlD:创建一个子窗口。这个风格不能与WS_POPVP风格合用。    WS_CHLDWINDOW:与WS_CHILD相同。    WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。    WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。    WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗日不能接受来自用户的输人信息。    WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。    WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。    WS_HSCROLL:创建一个有水平滚动条的窗口。    WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。    WS_MAXIMIZE:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。    WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。    WS_OVERtAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。    WS_POPUP;创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。    WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。    WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。    WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。    WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。    WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。    WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。    WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAME.    WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。    WS_VISIBLE:创建一个初始状态为可见的窗口。WS_VSCROLL:创建一个有垂直滚动条的窗口。    X:指定窗口的初始水平位置。对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子富口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_UCEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为零。    Y:指定窗口的初始垂直位置。对一个层叠或弹出式窗日,y参数是屏幕坐标系的窗口的左上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参数。    nWidth:以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始X坐标开始到目标区域的顶部。CW_USEDFEAULT只参层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。    nHelght:以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。    hWndParent:指向被创建窗口的父窗口或所有者窗口的旬柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗日是可选的。Windows NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。    hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。    hlnstance:与窗口相关联的模块事例的句柄。    lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。    返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。    备注:在返回前,CreateWindow给窗口过程发送一个WM_CREATE消息。对于层叠,弹出式和子窗口,CreateWindow给窗口发送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的IParam参数包含一个指向CREATESTRUCT结构的指针。如果指定了WS_VISIBLE风格,CreateWindow向窗口发送所有需要激活和显示窗口的消息。    获取有关任务条是否为创建的窗口显示一个按钮的控制信息,参看Taskbar按钮的Visbility。    以下预定义的控制类可以在lpClassName参数中指定。注意在dwStyle参数中可以使用的相应的控制风格。    BUTTON按钮按钮是一个小矩形子窗口,用户可以点击来打开或关闭。按钮控制可以单独使用或包含在组中使用,可以为控制写标签或不写标签。当用户点击按钮控制时按钮的外观有明显的改变。请参看Button。查看dwStyle参数中指定的按钮风格表请参考Button Style。    COMBOBOX组合框由一个列表框和一个类似于编辑控制的选择域组成。在使用这个风格控制时,应用程序或者使列表框一直显示或者是作成一个下拉列表。如果列表框可见,则在编辑域中输入字符将使列表框中与字符一致的第一个域高亮。反之,在列表框中选择的项将显示在编辑域中。请参看Combo Boxes。    查看dwStyle参数中指定的组合框风格表请参考Combo Boxes Style。    EDIT编辑框一个小的矩形子窗口用户可以使用键盘向其中输入文本。用户可以通过点击或按Tab键来选中编辑框控制并且使控制获得焦点。当编辑框中显示一个闪烁的插入记号时,用户可以输入文本。使用鼠标移动光标,选择被替换的字符或设置插入字符的位置或使用回退键删除字符。请参看Edit。controls。    查看dwStyle参数中指定的编辑框风格的表格请参考Edit Control Style。    LISTBOX列表框字符串的列表。当应用程序必须显示名称的列表,例如文件名列表等,使用户可以从中选择时就可指定列表框。用户可以通过单击来选择名称。选择时,被选择名高亮,同时传递给父窗口一个通知消息。请参看LiSt Box Style。查看dwStyle参数中指定的列表风格表请参考List BOX Control Style。    MDICLIENT MDI客户设计出MDI客户窗口。窗口接收控制MDI应用程序子窗口的消息。建议使用两种控制风格位:WS_CLIPCHILDREN和WS_CHILD。指定了WS_HSCROLL和WS_VSCROLL风格的MDI客户窗口允许用户将MDI子窗口滑动进入视窗。请参看MDI。    RiChEdit设计一个Rich Editl.0版的控制。该控制使用户可以以字符和段落格式测览和编辑文本,并且可以包含嵌入的COM对象。请参看Rich Edit Controls。查看dwStyle参数中指定的RichEdit风格表请参考LiSt Box Control Style。    RICHEDIT CLASS设计一个Rich Edik2.0版的控制。该控制使用户可以以字符和段落格式测览和编辑文本,并且可以包含嵌入的COM对象。请参看RichEditCont
      

  4.   

    Dim hWndParent,hWndTxtView As Long
        
    hWndParent = GetParent(hwnd)hWndTxtView = CreateWindowEx(0, _
                    "EDIT", "TxtView", _
                    WS_BORDER Or WS_CHILD Or WS_VISIBLE Or WS_HSCROLL Or WS_VSCROLL Or ES_AUTOHSCROLL Or ES_AUTOHSCROLL Or ES_MULTILINE, _
                    2, 100, _
                    200, 150, _
                    hWndParent, 0&, App.hInstance, 0&)