UDF > WinAPIEx > System > Windows >


_WinAPI_RegisterClassEx

Enregistre une classe de fenêtre

#include <WinAPISysWin.au3>
_WinAPI_RegisterClassEx ( $tWNDCLASSEX )

Paramètre

$tWNDCLASSEX La structure $tagWNDCLASSEX.

Valeur de retour

Succès: Retourne un atome de classe qui identifie de manière unique la classe en cours d'enregistrement.
Échec: Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Voir aussi

Consultez RegisterClassEx dans la librairie MSDN.

Exemple

#include <WinAPIGdi.au3>
#include <WinAPIIcons.au3>
#include <WinAPIRes.au3>
#include <WinAPISys.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
  
Global $g_bExit = False

_Example()

Func _Example()
    Local Const $sClass = 'MyWindowClass'
    Local Const $sName = 'Test '& StringReplace(@ScriptName, '.au3', '()')

    ; Obtient le handle du module du processus en cours
    Local $hInstance = _WinAPI_GetModuleHandle(0)

    ; Crée un curseur de classe
    Local $hCursor = _WinAPI_LoadCursor(0, 32512) ; IDC_ARROW

    ; Crée des icônes de classe (petites et grandes)
    Local $tIcons = DllStructCreate('ptr;ptr')
    _WinAPI_ExtractIconEx(@SystemDir & '\shell32.dll', 130, DllStructGetPtr($tIcons, 1),                DllStructGetPtr($tIcons, 2), 1)
    Local $hIcon = DllStructGetData($tIcons, 1)
    Local $hIconSm = DllStructGetData($tIcons, 2)

    ; Crée une fonction de rappel DLL (procédure de fenêtre)
    Local $hProc = DllCallbackRegister('_WndProc', 'lresult', 'hwnd;uint;wparam;lparam')

    ; Crée et remplit la structure $tagWNDCLASSEX
    Local $tWCEX = DllStructCreate($tagWNDCLASSEX & ';wchar szClassName[' & (StringLen($SCLASS) + 1) & ']')
    DllStructSetData($tWCEX, 'Size', DllStructGetPtr($tWCEX, 'szClassName') -     DllStructGetPtr($tWCEX))
    DllStructSetData($tWCEX, 'Style', 0)
    DllStructSetData($tWCEX, 'hWndProc', DllCallbackGetPtr($hProc))
    DllStructSetData($tWCEX, 'ClsExtra', 0)
    DllStructSetData($tWCEX, 'WndExtra', 0)
    DllStructSetData($tWCEX, 'hInstance', $hInstance)
    DllStructSetData($tWCEX, 'hIcon', $hIcon)
    DllStructSetData($tWCEX, 'hCursor', $hCursor)
    DllStructSetData($tWCEX, 'hBackground', _WinAPI_CreateSolidBrush(_WinAPI_GetSysColor($COLOR_3DFACE)))
    DllStructSetData($tWCEX, 'MenuName', 0)
    DllStructSetData($tWCEX, 'ClassName', DllStructGetPtr($tWCEX, 'szClassName'))
    DllStructSetData($tWCEX, 'hIconSm', $hIconSm)
    DllStructSetData($tWCEX, 'szClassName', $sClass)

    ; Enregistre la classe fenêtre
    _WinAPI_RegisterClassEx($tWCEX)
 
    ; Crée une fenêtre
    _WinAPI_CreateWindowEx(0, $sClass, $sName, BitOR($WS_CAPTION, $WS_POPUPWINDOW, $WS_VISIBLE), (@DesktopWidth - 400) / 2, (@DesktopHeight - 400) / 2, 400, 400, 0)

    While Not $g_bExit
        Sleep(100) 
    WEnd

    ; Annule la classe de fenêtre et libére les ressources inutiles
    _WinAPI_UnregisterClass($sClass, $hInstance)
    _WinAPI_DestroyCursor($hCursor)
    _WinAPI_DestroyIcon($hIcon)
    _WinAPI_DestroyIcon($hIconSm)

    DllCallbackFree($hProc)

EndFunc    ;==>_Example

; Func _WinAPI_DefWindowProcW ($hWnd, $Imsg, $WPARAM, $lParam)
;     Local $aRet = DllCall('user32.dll', 'lresult', 'DefWindowProcW', 'hwnd', $hWnd, 'uint', $iMsg, 'wparam', $wParam, 'lparam', $lParam)

;     If @error Then
;         Return SetError(1, 0, 0)
;     EndIf
;     Return $aRet[0]
; EndFunc   ;==>_WinAPI_DefWindowProcW

Func _WndProc($hWnd, $iMsg, $wParam, $lParam)
    If $iMsg = $WM_CLOSE  Then 
        $g_bExit = True
    EndIf
    Return _WinAPI_DefWindowProcW($hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_WndProc