Maison > développement back-end > C++ > Comment puis-je obtenir un positionnement de fenêtre de type Rainlendar dans WPF ?

Comment puis-je obtenir un positionnement de fenêtre de type Rainlendar dans WPF ?

Mary-Kate Olsen
Libérer: 2024-12-31 12:41:10
original
835 Les gens l'ont consulté

How Can I Achieve Rainlendar-like Window Positioning in WPF?

Positionnement des fenêtres dans WPF

Dans WPF, vous pouvez modifier le comportement de positionnement d'une fenêtre pour obtenir des effets similaires à l'option "sur le bureau" de Rainlendar. Voici comment :

API SetParent

Pour obtenir l'effet "sur le bureau", où la fenêtre devient un enfant du bureau de l'Explorateur, vous pouvez utiliser l'API SetParent. Cette API vous permet de définir la fenêtre parent d'un handle de fenêtre. En définissant la fenêtre parent sur le handle de la fenêtre du bureau, vous pouvez intégrer votre fenêtre WPF dans le bureau.

SetWindowPos

Pour l'effet "en bas", vous pouvez utiliser l'API SetWindowPos pour positionner votre fenêtre WPF en bas de l'ordre Z. Cela garantit que votre fenêtre reste en bas, même lorsque d'autres fenêtres sont ouvertes et fermées.

WM_WINDOWPOSCHANGING

Pour éviter que votre fenêtre ne vienne à l'avant lorsque vous cliquez dessus, vous pouvez gérer le WM_WINDOWPOSCHANGING. Ce message est envoyé par le système d'exploitation Windows lorsque la position ou la taille d'une fenêtre est sur le point de changer. En traitant ce message et en interceptant la modification, vous pouvez forcer votre fenêtre à rester en bas de l'ordre Z.

Pour implémenter cela en C#, vous devrez utiliser le code suivant :

protected override void OnSourceInitialized(EventArgs e)
{
    _handle = new WindowInteropHelper(this).Handle;
    HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
    source.AddHook(WndProc);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == WM_WINDOWPOSCHANGING)
    {
        var pos = (WINDOWPOS)Marshal.PtrToStructure(lParam, typeof(WINDOWPOS));

        // Force the window to remain at the bottom of the Z-order
        pos.hwndInsertAfter = HWND_BOTTOM;

        Marshal.StructureToPtr(pos, lParam, false);
        handled = true;
    }

    return IntPtr.Zero;
}
Copier après la connexion

En combinant l'API SetParent, SetWindowPos et la gestion des messages WM_WINDOWPOSCHANGING, vous pouvez obtenir à la fois les effets « sur le bureau » et « en bas » pour votre Fenêtre WPF.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal