UDF > WinAPIEx > Menus & Resources > Carets >


_WinAPI_CreateCaret

Crée une nouvelle forme pour le curseur système et attribue la propriété du curseur à la fenêtre spécifiée

#include <WinAPIRes.au3>
_WinAPI_CreateCaret ( $hWnd, $hBitmap [, $iWidth = 0 [, $iHeight = 0]] )

Paramètres

$hWnd Handle de la fenêtre qui possède le curseur.
$hBitmap Handle du bitmap qui définit la forme du curseur.
Si ce paramètre est 0, le curseur est uni.
Si ce paramètre est 1, le curseur est gris. Si ce paramètre est un handle de bitmap, le curseur est le bitmap spécifié.
$iWidth [optionnel] La largeur du curseur en unités logiques.
Si ce paramètre est 0 (valeur par défaut), la largeur est définie à la largeur de la bordure des fenêtres définie par le système.
Si $hBitmap est un handle de bitmap, _WinAPI_CreateCaret() ne tient pas compte de ce paramètre.
$iHeight [optionnel] La hauteur du curseur en unités logiques.
Si ce paramètre est 0 (valeur par défaut), la hauteur est définie à la hauteur de la bordure des fenêtres définie par le système.
Si $hBitmap est un handle de bitmap, _WinAPI_CreateCaret() ne tient pas compte de ce paramètre.

Valeur de retour

Succès: Retourne True.
Échec: Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Remarques

_WinAPI_CreateCaret() détruit automatiquement la forme du curseur précédent, le cas échéant, quelle que soit la fenêtre qui possède le curseur.
Le curseur est caché jusqu'à ce que l'application appelle la fonction _WinAPI_ShowCaret() pour rendre le curseur visible.

Le système fournit un curseur en file d'attente. Une fenêtre devrait créer un curseur que lorsqu'elle a le focus clavier ou lorsqu'elle est active.
La fenêtre doit détruire le curseur avant de perdre le focus du clavier ou de devenir inactive.

Vous pouvez obtenir la largeur ou la hauteur de la bordure système de la fenêtre en utilisant la fonction _WinAPI_GetSystemMetrics(), en précisant les valeurs $SM_CXBORDER et $SM_CYBORDER. L'utilisation de la largeur ou de la hauteur de la bordure des fenêtres garantit que le curseur sera visible sur un écran haute résolution.

En relation

_WinAPI_GetSystemMetrics, _WinAPI_ShowCaret

Voir aussi

Consultez CreateCaret dans la librairie MSDN.

Exemple

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIConv.au3>
#include <WinAPIGdi.au3>
#include <WinAPIHObj.au3>
#include <WinAPIRes.au3>
#include <WindowsConstants.au3>

Global $g_vDuration = Default, $g_hBitmap = _WinAPI_CreateSolidBitmap(0, 0x00AEFF, 10, 14)

OnAutoItExitRegister('OnAutoItExit')

Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 400, 93)
Local $idInput = GUICtrlCreateInput('', 20, 20, 360, 20)
Local $idButton = GUICtrlCreateButton('Exit', 165, 59, 70, 23)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState(@SW_SHOW)

Global $iMsg
Do
    $iMsg = GUIGetMsg()
Until $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idButton

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

    If $hWnd = $hForm Then
        If _WinAPI_LoWord($wParam) = $idInput Then
            Switch _WinAPI_HiWord($wParam)
                Case $EN_KILLFOCUS
                    _WinAPI_HideCaret($lParam)
                    _WinAPI_DestroyCaret()
                    _WinAPI_SetCaretBlinkTime($g_vDuration)
                    $g_vDuration = Default
                Case $EN_SETFOCUS
                    $g_vDuration = _WinAPI_SetCaretBlinkTime(-1)
                    _WinAPI_CreateCaret($lParam, $g_hBitmap)
                    _WinAPI_ShowCaret($lParam)
            EndSwitch
        EndIf
    EndIf
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func OnAutoItExit()
    _WinAPI_DeleteObject($g_hBitmap)
    If Not IsKeyword($g_vDuration) Then
        _WinAPI_SetCaretBlinkTime($g_vDuration)
    EndIf
EndFunc   ;==>OnAutoItExit