Jump to content
Pedro Pinheiro

_WinAPI_CreateWindowEx

Recommended Posts

No help do autoit não tem informações sobre o "_WinAPI_CreateWindowEx" e não consigo saber para que funciona essa função. Olhando algumas bibliotecas do autoit eu vi algumas funções utilizando essa função...se eu não me engano essa função vira basicamente um Control, pois pelo que entendi alguns controls são criados em cima dele. Eu estou precisando fazer uma janela em um programa para executar um vídeo usando MCI e uma janela filha nunca fica na posição que eu quero e do modo que eu quero, se eu conseguisse colocar o vídeo dentro de uma janela que poderia ser manipulada como um Control ficaria muito mais bem feito. Alguem poderia me dizer como exatamente funciona essa função?

Share this post


Link to post
Share on other sites
On ‎05‎/‎03‎/‎2018 at 8:49 PM, mutleey said:

Ai q está, olhei tudo e não encontrei nada sobre a minha dúvida, eu estou tentando deixar a janela sólida, com um background, a atualização dos elementos da janela principal esta se misturando com a WincreateWindowEX e causando flickers.

Share this post


Link to post
Share on other sites

@Pedro Pinheiro a função _WinAPI_CreateWindowEx é um coringa.

Com a mesma função você cria uma janela e os elementos da janela, como input, label, button, etc...

Veja esse exemplo que eu traduzi (meia boca) do fórum alemão, mas deu para perceber o que a função _WinAPI_CreateWindowEx pode fazer.

Mas nesse momento, infelizmente eu não sei dizer realmente qual a diferença entre a forma tradicional que utilizamos e esta...

 

;==============================================================================
;    _WinAPI_CreateWindowEx.au3
;==============================================================================
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>

; source: https://autoit.de/onlinehilfe/libfunctions/_WinAPI_CreateWindowEx.htm

Opt("MustDeclareVars", 1)

Global Const $IDC_STATIC = -1, $IDC_EDIT = 101

Global $hInstance

;==============================================================================
Exit Example()
;==============================================================================

Func Example()
    Local $hWndMain, $hWndEdit, $hWndStatic, $hWndButton

    $hInstance = _WinAPI_GetModuleHandle(0)

    ; cria uma janela principal
    $hWndMain = GUICreate( _
            "_WinAPI_CreateWindowEx - Demo", _                  ; título de janela
            400, 300, -1, -1, _                                 ; tamanho e Position de janela
            BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), _    ; janelatile
                $WS_EX_WINDOWEDGE, _                            ; extendido janelatile
            0)                                                  ; Handle de Parent-janela

    ; cria um simples campo de entrada
    $hWndEdit = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "EDIT", _                                           ; Name o Fensterklasse
            "Pressione <ENTER>", _                              ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_CHILD, $WS_BORDER, _         ; janelatile
                $WS_VISIBLE, $ES_LEFT, $ES_NOHIDESEL), _
            100, 80, 200, 22, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDC_EDIT, _                                        ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor


    ; cri um simples TextLabel
    $hWndStatic = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "STATIC", _                                         ; Name o Fensterklasse
            "Text", _                                           ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, _        ; janelatile
                $SS_CENTER), _
            160, 140, 80, 18, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDC_STATIC, _                                      ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor

    ; cria um simples botão
    $hWndButton = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "BUTTON", _                                         ; Name o Fensterklasse
            "Text", _                                           ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_VISIBLE, $WS_CHILD, _        ; janelatile
                $BS_DEFPUSHBUTTON), _
            160, 220, 80, 25, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDOK, _                                            ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor

    ; registra a funão da Janela
    GUIRegisterMsg($WM_COMMAND, "MyWM_COMMAND")

    ; exibe a Janela
    _WinAPI_ShowWindow($hWndMain, @SW_SHOW)

    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Example

Func MyWM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg

    Local $sMessage

    Switch _WinAPI_LoWord($wParam)
        Case $IDC_EDIT
            ; Nachrichten de Eingabefeldes
            Switch _WinAPI_HiWord($wParam)
                Case $EN_UPDATE
                    ContinueCase
                Case $EN_CHANGE
                    ConsoleWrite(_WinAPI_GetWindowText($lParam) & @CRLF)
            EndSwitch
        Case $IDOK
            $sMessage = StringFormat("o botão com o ID %d foi deprimido.", $IDOK)
            _WinAPI_MsgBox( _
                    BitOR($MB_OK, $MB_ICONASTERISK), _
                    "MyWM_COMMAND", _
                    $sMessage)
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>MyWM_COMMAND

;================================ End of File =================================

 

  • Thanks 1

Share this post


Link to post
Share on other sites
11 hours ago, Luigi said:

@Pedro Pinheiro a função _WinAPI_CreateWindowEx é um coringa.

Com a mesma função você cria uma janela e os elementos da janela, como input, label, button, etc...

Veja esse exemplo que eu traduzi (meia boca) do fórum alemão, mas deu para perceber o que a função _WinAPI_CreateWindowEx pode fazer.

Mas nesse momento, infelizmente eu não sei dizer realmente qual a diferença entre a forma tradicional que utilizamos e esta...

 

;==============================================================================
;    _WinAPI_CreateWindowEx.au3
;==============================================================================
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>

; source: https://autoit.de/onlinehilfe/libfunctions/_WinAPI_CreateWindowEx.htm

Opt("MustDeclareVars", 1)

Global Const $IDC_STATIC = -1, $IDC_EDIT = 101

Global $hInstance

;==============================================================================
Exit Example()
;==============================================================================

Func Example()
    Local $hWndMain, $hWndEdit, $hWndStatic, $hWndButton

    $hInstance = _WinAPI_GetModuleHandle(0)

    ; cria uma janela principal
    $hWndMain = GUICreate( _
            "_WinAPI_CreateWindowEx - Demo", _                  ; título de janela
            400, 300, -1, -1, _                                 ; tamanho e Position de janela
            BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), _    ; janelatile
                $WS_EX_WINDOWEDGE, _                            ; extendido janelatile
            0)                                                  ; Handle de Parent-janela

    ; cria um simples campo de entrada
    $hWndEdit = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "EDIT", _                                           ; Name o Fensterklasse
            "Pressione <ENTER>", _                              ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_CHILD, $WS_BORDER, _         ; janelatile
                $WS_VISIBLE, $ES_LEFT, $ES_NOHIDESEL), _
            100, 80, 200, 22, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDC_EDIT, _                                        ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor


    ; cri um simples TextLabel
    $hWndStatic = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "STATIC", _                                         ; Name o Fensterklasse
            "Text", _                                           ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_CHILD, $WS_VISIBLE, _        ; janelatile
                $SS_CENTER), _
            160, 140, 80, 18, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDC_STATIC, _                                      ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor

    ; cria um simples botão
    $hWndButton = _WinAPI_CreateWindowEx( _
            0, _                                                ; extendido janelatile
            "BUTTON", _                                         ; Name o Fensterklasse
            "Text", _                                           ; Text/título de janela
            BitOR($WS_TABSTOP, $WS_VISIBLE, $WS_CHILD, _        ; janelatile
                $BS_DEFPUSHBUTTON), _
            160, 220, 80, 25, _                                 ; Position e tamanho de janela
            $hWndMain, _                                        ; Handle de Parent-janela
            $IDOK, _                                            ; Identifizierer de (Kind-)janela
            $hInstance, _                                       ; Instanzhandle de Moduls
            0)                                                  ; aplicação definida valor

    ; registra a funão da Janela
    GUIRegisterMsg($WM_COMMAND, "MyWM_COMMAND")

    ; exibe a Janela
    _WinAPI_ShowWindow($hWndMain, @SW_SHOW)

    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
EndFunc   ;==>Example

Func MyWM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg

    Local $sMessage

    Switch _WinAPI_LoWord($wParam)
        Case $IDC_EDIT
            ; Nachrichten de Eingabefeldes
            Switch _WinAPI_HiWord($wParam)
                Case $EN_UPDATE
                    ContinueCase
                Case $EN_CHANGE
                    ConsoleWrite(_WinAPI_GetWindowText($lParam) & @CRLF)
            EndSwitch
        Case $IDOK
            $sMessage = StringFormat("o botão com o ID %d foi deprimido.", $IDOK)
            _WinAPI_MsgBox( _
                    BitOR($MB_OK, $MB_ICONASTERISK), _
                    "MyWM_COMMAND", _
                    $sMessage)
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>MyWM_COMMAND

;================================ End of File =================================

 

valeu @Luigi deu um trabalho aqui, mas já consegui, a atualização do programa estava causando flikers na janela, mas executando o pograma em modo janela resolveu o problema, vou dar uma olhada no seu exemplo quando a net voltar no pc aqui, valeu.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×