Maison >développement back-end >C++ >Comment puis-je obtenir le placement des fenêtres « sur le bureau » et « en bas » dans WPF ?

Comment puis-je obtenir le placement des fenêtres « sur le bureau » et « en bas » dans WPF ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 02:00:11967parcourir

How Can I Achieve

Contrôle du placement des fenêtres dans WPF : option "Sur le bureau"

La capacité de Rainlendar à placer les fenêtres "sur le bureau" leur permet de se comporter comme les fenêtres les plus basses. Il ne s'agit pas d'une fonctionnalité intégrée de WPF, mais elle peut être obtenue à l'aide d'appels API Win32, qui nécessitent P/Invoke depuis C#.

Options de Rainlendar :

Rainlendar propose deux options pour le placement des fenêtres :

  • Sur le bureau : Le La fenêtre devient un enfant de la fenêtre du bureau de l'Explorateur, similaire à la définition du parent à l'aide de l'API SetParent.
  • En bas : La fenêtre reste en bas de l'ordre Z, juste au-dessus du bureau.

Réalisation du placement sur le bureau :

Pour placer une fenêtre WPF "sur desktop", vous pouvez utiliser l'API SetParent :

[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

Définir hWndNewParent sur IntPtr.Zero supprime le parent et fait de la fenêtre un enfant du bureau.

Réalisation du placement en bas :

Pour conserver une fenêtre "en bas", il faut intercepter le Message WM_WINDOWPOSCHANGING :

protected override void WndProc(ref Message m)
{
    if (m.Msg == (int) WM.WINDOWPOSCHANGING)
    {
        var pos = (WINDOWPOS) Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));
        // Check if the window is being promoted to the top
        if ((pos.flags & SWP_NOMOVE) == 0 && (pos.flags & SWP_NOSIZE) == 0)
        {
            pos.hwndInsertAfter = HWND_BOTTOM;
            pos.flags |= SWP_NOACTIVATE;
            Marshal.StructureToPtr(pos, m.LParam, true);
        }
    }
    base.WndProc(ref m);
}

En définissant hwndInsertAfter sur HWND_BOTTOM et en ajoutant l'indicateur SWP_NOACTIVATE, la fenêtre restera toujours en bas et ne s'activera pas lorsque vous cliquerez dessus.

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!

Déclaration:
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