Una ayuda con frm + apis

Iniciado por sowher, 24 Enero 2006, 16:21 PM

0 Miembros y 1 Visitante están viendo este tema.

sowher

Bueno yo no se mucho de vb, y se me ocurrio una idea pues por q no hacer ventamas pero como yo las diseñle en c es decir con puras apis, sin utilizar ningun frm de vb...

Les agradecieria mucho su ayuda

Angellore

Hola.
Si sabes usar las APIs en C en VB es exactamente lo mismo.

Hay un par de cosas que debes tener en cuenta, luego es análogo a C:

1. El procedimiento principal en VB es Sub Main. Para que el programa se inicie en esta instancia en Propiedades del Proyecto hay que establecer como elemento de inicio Sub Main.

2. Los punteros de función en VB se pasan con el operador lógico AddressOf, esto servirá cuando haya que establecer la función de ventana WndProc en la clase.

3. Depurar el código en tiempo de ejecución es muy peligroso cuando se trata de callbacks, porque pueden producirse resultados impredecibles.

Luego es el mismo procedimiento que en C. Primero se registra la clase de ventana utilizando RegisterClassEx, se llama a CreateWindow y luego se muestra la ventana con ShowWindow.

Voy a ver si encuentro un ejemplo que tengo guardado por alguna parte, si lo encuentro lo posteo.

Saludos.
Angellore.

sowher

Gracias me faltaba ShowWindow, ya q nunca me mostraba la ventana ;) pero me gustaria ver un ejmeplo...

Gracias

sowher

Ya que nadie me tiro una ayudita, pues aca esta mi esfuerzo, pero tiene un pequeño error y la verdad q no lo encuentro, me gustaria q en esto me ayudaramn.... Gracias

'*********************************************
' Creador de from
' sowher / GEDZAC - Group / 2006
'*********************************************

Public Const WS_OVERLAPPED = &H0&
Public Const WS_VISIBLE = &H10000000
Public Const WS_MAXIMIZE = &H1000000

Public Const CS_DBLCLKS = &H8

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

Declare Function RegisterClassEx Lib "user32" Alias "RegisterClassExA" (pcWndClassEx As WNDCLASSEX) As Integer
Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance As Long) As Long
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
Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Sub main()
    RegistrarClase (WindowProcedure)
   
    If Not CrearAplicacion Then
        MsgBox "Falla en la creacion de la aplicacion"
        UnregisterClass "mipropiaclase", App.hInstance
        Exit Sub
    End If
End Sub

Private Function RegistrarClase(FuncionMensajes As Long) As Boolean
    Dim clase As WNDCLASSEX
   
    clase.cbSize = 0
    clase.style = CS_DBLCLKS
    clase.lpfnwndproc = FuncionMensajes
    clase.cbClsextra = 0
    clase.cbWndExtra = 0
    clase.hInstance = App.hInstance
    clase.hIcon = 0
    clase.hCursor = 0
    clase.hbrBackground = COLOR_WINDOW + 1
    clase.lpszMenuName = 0
    clase.lpszClassName = "clase"
    clase.hIconSm = 0
   
    RegistrarClase = (RegisterClassEx(clase) <> 0)
End Function

Private Function CrearAplicacion() As Boolean
    'Tipos de Ventanas Principales
    hWnd = CreateWindowEx(0, "clase", "Ventana Principal", WS_OVERLAPPED Or WS_VISIBLE Or WS_MAXIMIZE, 0, 0, 500, 400, HWND_DESKTOP, 0, App.hInstance, ByVal 0&)

    If hWnd = 0 Then
        CrearAplicacion = False
        Exit Function
    End If
   
    ShowWindow hWnd, SW_SHOWDEFAULT
    CrearAplicacion = True
End Function