Share via


Comment : effectuer un test d'atteinte à l'aide d'un conteneur hôte Win32

Mise à jour : novembre 2007

Vous pouvez créer des objets visuels dans une fenêtre Win32 en fournissant un conteneur de fenêtre hôte pour les objets visuels. Pour assurer la gestion des événements pour les objets visuels contenus, vous devez traiter les messages passés à la boucle de filtre de messages du conteneur de fenêtre hôte. Consultez Didacticiel : hébergement d'objets visuels dans une application Win32 pour plus d'informations sur l'hébergement d'objets visuels dans une fenêtre Win32.

Exemple

Le code suivant montre comment configurer des gestionnaires d'événement de souris pour une fenêtre Win32 utilisée en tant que conteneur hôte pour des objets visuels.

// Constant values from the "winuser.h" header file.
internal const int WM_LBUTTONUP = 0x0202,
                   WM_RBUTTONUP = 0x0205;

internal static IntPtr ApplicationMessageFilter(
    IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    // Handle messages passed to the visual.
    switch (message)
    {
        // Handle the left and right mouse button up messages.
        case WM_LBUTTONUP:
        case WM_RBUTTONUP:
            System.Windows.Point pt = new System.Windows.Point();
            pt.X = (uint)lParam & (uint)0x0000ffff;  // LOWORD = x
            pt.Y = (uint)lParam >> 16;               // HIWORD = y
            MyShape.OnHitTest(pt, message);
            break;
    }

    return IntPtr.Zero;
}

L'exemple suivant montre comment configurer un test d'atteinte en réponse à l'interception d'événements de souris spécifiques.

// Constant values from the "winuser.h" header file.
public const int WM_LBUTTONUP = 0x0202,
                 WM_RBUTTONUP = 0x0205;

// Respond to WM_LBUTTONUP or WM_RBUTTONUP messages by determining which visual object was clicked.
public static void OnHitTest(System.Windows.Point pt, int msg)
{
    // Clear the contents of the list used for hit test results.
    hitResultsList.Clear();

    // Determine whether to change the color of the circle or to delete the shape.
    if (msg == WM_LBUTTONUP)
    {
        MyWindow.changeColor = true;
    }
    if (msg == WM_RBUTTONUP)
    {
        MyWindow.changeColor = false;
    }

    // Set up a callback to receive the hit test results enumeration.
    VisualTreeHelper.HitTest(MyWindow.myHwndSource.RootVisual,
                             null,
                             new HitTestResultCallback(CircleHitTestResult),
                             new PointHitTestParameters(pt));

    // Perform actions on the hit test results list.
    if (hitResultsList.Count > 0)
    {
        ProcessHitTestResultsList();
    }
}

L'objet HwndSource présente le contenu Windows Presentation Foundation (WPF) dans une fenêtre Win32. La valeur de la propriété RootVisual de l'objet HwndSource représente le nœud supérieur de la hiérarchie de l'arborescence visuelle.

Pour obtenir un exemple complet de test d'atteinte sur des objets à l'aide d'un conteneur hôte de Win32, consultez Test d'atteinte avec interopérabilité Win32, exemple.

Voir aussi

Concepts

Test d'atteinte dans la couche visuelle

Didacticiel : hébergement d'objets visuels dans une application Win32

Référence

HwndSource