Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-10-26 01:53:02809parcourir

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>

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>

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!

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