UDF > WinAPIEx > System > Windows >


_WinAPI_CallWindowProc

Transmet les informations Hook de la proc�dure Hook suivante dans la cha�ne de Hook courante

#include <WinAPISysWin.au3>
_WinAPI_CallWindowProc ( $pPrevWndFunc, $hWnd, $iMsg, $wParam, $lParam )

Param�tres

$pPrevWndFunc Pointeur sur la proc�dure de la fen�tre pr�c�dente.
Si cette valeur est obtenue en appelant la fonction _WinAPI_GetWindowLong() avec le param�tre $iIndex d�finit sur $GWL_WNDPROC ou $DWL_DLGPROC, elle est actuellement l'adresse d'une proc�dure de fen�tre ou d'une bo�te de dialoque, ou une valeur interne sp�ciale significative seulement pour _WinAPI_CallWindowProc().
$hWnd Handle de la proc�dure de fen�tre qui recoit le message
$iMsg Sp�cifie le message
$wParam Fournit des informations sp�cifiques � un message suppl�mentaire. Le contenu de ce param�tre d�pend de la valeur du param�tre $iMsg
$lParam Fournit des informations sp�cifiques � un message suppl�mentaire. Le contenu de ce param�tre d�pend de la valeur du param�tre $iMsg

Valeur de retour

Retourne la valeur de retour qui indique le r�sultat du traitement du message et qui d�pend du message envoy�.

Remarques

Utilisez la fonction _WinAPI_CallWindowProc() pour des fen�tres de sous-class�es. Habituellement, toutes les fen�tres de la m�me classe partage une proc�dure de fen�tre.
Une sous-classe est une fen�tre ou un ensemble de fen�tres avec la m�me classe dont les messages sont intercept�s et trait�s par une autre proc�dure de fen�tre (ou proc�dures) avant d'�tre transmis � la proc�dure de fen�tre de la classe.

La fonction _WinAPI_SetWindowLong() cr�e la sous-classe en modifiant la proc�dure de fen�tre associ�e � une fen�tre particuli�re, contraignant le syst�me � appeler la nouvelle proc�dure de fen�tre � la place d'une pr�c�dente.
Une application doit passer tous les messages non trait�s par la nouvelle proc�dure de fen�tre � la proc�dure de fen�tre pr�c�dente en appelant _WinAPI_CallWindowProc().
Cela permet � l'application de cr�er une cha�ne de proc�dures de fen�tre.

En relation

_WinAPI_SetWindowLong

Voir aussi

Consultez CallWindowProc dans la librairie MSDN.

Exemple

#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiMenu.au3>
#include <WinAPIDlg.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

Global $g_idContextMenu, $g_idCommonMenuItem, $g_idFileMenuItem, $g_idExitMenuItem
Global $g_hGui, $g_idInput, $g_hProcOld

Example()

Func Example()
    Local $idInput2, $hProcNew, $idDummyMenu

    $g_hGui = GUICreate("Tapez ou collez du texte", 400, 200, -1, -1, $WS_THICKFRAME, -1)
    $g_idInput = GUICtrlCreateInput("", 20, 20, 360, 20)
    $idInput2 = GUICtrlCreateInput("", 20, 50, 360, 20)

    GUICtrlCreateLabel("abcd", 1, 1, 30, 18)
    GUICtrlSetCursor(-1, 9)

    $hProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd; uint; longtemps; ptr")
    $g_hProcOld = _WinAPI_SetWindowLong(GUICtrlGetHandle($g_idInput), $GWL_WNDPROC, DllCallbackGetPtr($hProcNew))
    _WinAPI_SetWindowLong(GUICtrlGetHandle($idInput2), $GWL_WNDPROC, DllCallbackGetPtr($hProcNew))
    ; _WinAPI_SetWindowLong (GUICtrlGetHandle (g_idInput3 $) $GWL_WNDPROC, DllCallbackGetPtr ($hProcNew)) et ainsi de suite

    $idDummyMenu = GUICtrlCreateDummy()
    $g_idContextMenu = GUICtrlCreateContextMenu($idDummyMenu)
    $g_idCommonMenuItem = GUICtrlCreateMenuItem("Common", $g_idContextMenu)
    $g_idFileMenuItem = GUICtrlCreateMenuItem("File", $g_idContextMenu)
    GUICtrlCreateMenuItem("", $g_idContextMenu)
    $g_idExitMenuItem = GUICtrlCreateMenuItem("Exit", $g_idContextMenu)

    GUISetState(@SW_SHOW)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>Example

Func do_clever_stuff_with_clipboard($hWnd)
    Local $sData
    $sData = ClipGet()
    If @error Then Return 0; Les donn�es ne sont pas du texte ou vide
    ; Faire �a ou autre chose
    $sData = StringUpper($sData)
    ; D�finit le texte
    GUICtrlSetData(_WinAPI_GetDlgCtrlID($hWnd), $sData); ou _GUICtrlEdit_SetText ($hWnd, $sData)
    Return 1
EndFunc   ;==>do_clever_stuff_with_clipboard

; Affiche un menu dans la fen�tre GUI donn�e qui appartient � un ctrl GUI donn�
Func ShowMenu($hWnd, $idContext)
    Local $iSelected = _GUICtrlMenu_TrackPopupMenu(GUICtrlGetHandle($idContext), $hWnd, -1, -1, -1, -1, 2)
    Switch $iSelected
        Case $g_idCommonMenuItem
            ConsoleWrite("Common" & @CRLF)
        Case $g_idFileMenuItem
            ConsoleWrite("File" & @CRLF)
        Case $g_idExitMenuItem
            ConsoleWrite("Exit" & @CRLF)
    EndSwitch
EndFunc   ;==>ShowMenu

Func _MyWindowProc($hWnd, $iMsg, $wParam, $lParam)
    Switch $iMsg
        Case $WM_PASTE
            Return do_clever_stuff_with_clipboard($hWnd)
        Case $WM_CONTEXTMENU
            If $hWnd = GUICtrlGetHandle($g_idInput) Then
                ShowMenu($g_hGui, $g_idContextMenu)
                Return 0
            EndIf
        Case $WM_SETCURSOR
            GUICtrlSetCursor(_WinAPI_GetDlgCtrlID($hWnd), 5); ; D�finit le curseur � IBEAM
            Return 1; and don't let default windowproc mess things up
    EndSwitch

    ; Transmet les messages non g�r�es � WindowProc par d�faut
    Return _WinAPI_CallWindowProc($g_hProcOld, $hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_MyWindowProc