Maison > développement back-end > C++ > Comment les applications Qt/C peuvent-elles obtenir des fenêtres sans bordures avec Aero Snap, Shadow et Animations ?

Comment les applications Qt/C peuvent-elles obtenir des fenêtres sans bordures avec Aero Snap, Shadow et Animations ?

Linda Hamilton
Libérer: 2024-10-26 01:53:02
original
894 Les gens l'ont consulté

How Can Qt/C   Applications Achieve Borderless Windows with Aero Snap, Shadow, and Animations?

Création de fenêtres sans bordure avec Areo Snap, Shadow et Animation dans Qt/C

Sous Windows, une fenêtre sans bordure comporte un compromis : la perte de fonctionnalités telles que l'ombre Aero, l'accrochage et l'animation de minimisation. Cependant, il est possible de reproduire l'expérience transparente observée dans des applications comme Office 2013 et Steam en tirant parti de l'API Windows.

Masquer la bordure

Pour masquer la bordure de la fenêtre, interceptez le message WM_NCCALCSIZE dans la procédure de fenêtre.

<code class="cpp">case WM_NCCALCSIZE: {
    if (window->is_borderless) {
        return 0;
    } else {
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
}</code>
Copier après la connexion

Activez Aero Shadow

Pour afficher l'ombre lumineuse autour de la fenêtre, utilisez la fonction DwmExtendFrameIntoClientArea.

<code class="cpp">MARGINS borderless = {1,1,1,1};
DwmExtendFrameIntoClientArea(hwnd, &borderless);</code>
Copier après la connexion

Activer des fonctionnalités supplémentaires

En observant le comportement d'une fenêtre sans bordure comme Steam, nous pouvons déterminer que l'ombre fonctionne mieux avec le style de fenêtre WS_POPUP | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION. Ce style permet également l'accrochage Aero, la maximisation et l'animation de réduction fluide.

Notes supplémentaires

  • L'ombre peut être visible à travers des éléments transparents dans la zone client. , nécessitant un widget ou un pinceau non transparent derrière.
  • Les valeurs DWMWA_NCRENDERING_POLICY et DWMWA_ALLOW_NCPAINT dans DwmSetWindowAttribute ne sont généralement pas requises.

Exemple de projet

Pour une démonstration pratique, téléchargez l'exemple de projet fourni. Appuyez sur F11 pour basculer entre les modes sans bordure et fenêtré, tandis que F12 active ou désactive l'ombre sans bordure.

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