7 points par GN⁺ 14 일 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Les applications Windows modernes sont devenues lentes et lourdes à cause de leur dépendance à des frameworks basés sur le web, et ont perdu le niveau de contrôle offert par le système d’exploitation à l’époque de Win32
  • L’API Win32 permettait de définir librement la forme des fenêtres via la boucle de messages et les objets HRGN, et les designs de fenêtres non standards étaient courants
  • À l’aide de bitmaps et de la technologie des fenêtres en couches, il était possible de créer des fenêtres de forme libre avec transparence et animations
  • Mais les fenêtres personnalisées ont progressivement disparu à cause de la complexité qui impose de réimplémenter manuellement toutes les fonctions de base et de l’évolution des préférences des utilisateurs vers plus de simplicité
  • Malgré cela, Win32 offre toujours une liberté de contrôle et d’expérimentation et préserve la possibilité de créer des logiciels desktop créatifs

La monotonie des applications Windows modernes et la liberté perdue de Win32

  • Aujourd’hui, la plupart des applications desktop Windows fonctionnent sur des wrappers de navigateur comme React, Electron, Tauri, et reposent sur des architectures web complexes lentes et très gourmandes en mémoire
    • Même un simple bloc-notes peut occuper 50 Mo de mémoire, alors qu’une application équivalente écrite en pur Win32 C ne pèse que 1,8 Mo
    • Même sur du matériel récent, l’utilisation mémoire atteint 77 % au démarrage de Windows 11
  • À l’époque où l’on programmait directement avec l’API Win32, on disposait d’un contrôle total au niveau du système d’exploitation
    • On n’était pas enfermé dans des fenêtres rectangulaires et il était possible de créer librement des fenêtres aux formes non standard
    • À l’ère de Windows XP, diverses applications, dont Windows Media Player, affichaient des apparences originales

Les fenêtres « aux formes étranges » d’autrefois

  • À une époque, les applications Windows adoptaient des formes variées pour exprimer leur identité et leur personnalité
    • Les lecteurs multimédias ressemblaient à du matériel physique, des mascottes de bureau se promenaient à l’écran, et des panneaux utilitaires étaient conçus comme des tableaux de bord, des jouets ou des consoles extraterrestres
    • La fenêtre n’avait pas besoin d’être rectangulaire, et l’objectif de l’interface relevait davantage de la personnalité que de l’utilisabilité
  • Si ces formes ont disparu aujourd’hui, c’est parce que les programmeurs ne contrôlent plus directement la fenêtre elle-même
    • La plupart des frameworks UI modernes masquent le système d’exploitation, et les développeurs travaillent uniquement dans une zone rectangulaire limitée

L’architecture orientée messages de Win32 et le contrôle des fenêtres

  • Le cœur de la programmation Win32 réside dans la boucle de messages d’événements
    • La boucle composée de GetMessage, TranslateMessage, DispatchMessage sert de base à tout le fonctionnement
    • Le comportement de la fenêtre est défini par le traitement de messages comme « WM_CREATE », « WM_PAINT », « WM_SIZE », « WM_DESTROY »
  • Avec HRGN (Region Object), il est possible de modifier librement la forme d’une fenêtre
    • En assignant une région à la fenêtre avec SetWindowRgn, seule cette région est reconnue comme la véritable fenêtre
    • Dans l’exemple de code, CreateEllipticRgn sert à créer une fenêtre elliptique, et la fonction de glisser-déposer est implémentée manuellement sans barre de titre
    • Lors de « WM_LBUTTONDOWN », l’envoi de « WM_NCLBUTTONDOWN » avec « HTCAPTION » simule le déplacement de la fenêtre
  • Ainsi, créer la forme est facile, mais le vrai défi consiste à réimplémenter soi-même les fonctions auparavant fournies par le cadre standard

Fenêtres basées sur des bitmaps et fenêtres en couches

  • L’exemple « drivenbyimage/main.c » définit la forme de la fenêtre à partir de données bitmap
    • Il charge « shape.bmp » et définit comme région de fenêtre les pixels hors couleur transparente (magenta)
    • Le bitmap sert à la fois d’image affichée à l’écran et de forme réelle de la fenêtre
    • Les applications skinnables d’autrefois utilisaient cette méthode pour créer des formes variées, comme un chien, un vaisseau spatial, une radio ou un visage de personnage
  • Mais une région basée sur un bitmap a des bords nets et ne permet pas de semi-transparence
    • Pour obtenir des bords doux ou de l’animation, il faut utiliser une fenêtre en couches (WS_EX_LAYERED)
  • Dans l’exemple « Animated/ », une image 32 bits avec canal alpha transparent est envoyée via UpdateLayeredWindow
    • Avec GDI+, une sprite sheet est dessinée dans un bitmap en mémoire pour changer d’image à chaque frame, puis affichée sur le bureau
    • La forme de la fenêtre n’est plus fixe : l’état actuel des pixels devient lui-même la forme de la fenêtre
    • Cette méthode permet une transparence fluide, des changements de forme à chaque frame et des animations naturelles

La difficulté des fenêtres personnalisées et l’évolution culturelle

  • Créer une fenêtre personnalisée avec l’API Win32 impose de gérer soi-même tous les détails du comportement
    • Déplacement, redimensionnement, fermeture, saisie clavier, prise en charge du DPI : autant de fonctions normalement gérées automatiquement par une fenêtre standard qu’il faut implémenter manuellement
    • Le prototype est facile à réaliser, mais le transformer en produit soigné demande beaucoup de temps et d’efforts
  • Les utilisateurs ont fini par préférer la stabilité et la simplicité à ce type d’expérimentation visuelle
    • Les fenêtres non standard ont souvent été associées à des adwares, des barres d’outils et des utilitaires superflus, ce qui leur a donné une image négative
    • En conséquence, les « fenêtres aux formes étranges » ont été perçues davantage comme des éléments ludiques que comme des composants de logiciels sérieux

Les possibilités toujours actuelles de Win32 et leur sens

  • Malgré tout, Win32 offre encore une liberté de contrôle direct et d’expérimentation
    • Avec les messages, les handles et les API de dessin, il reste possible de contrôler les fenêtres au niveau du système d’exploitation
    • Dans la plupart des cas, la fenêtre rectangulaire est raisonnable, mais cela rappelle que sa forme relève d’un choix, non d’une contrainte
  • Le code d’exemple est publié sur le dépôt GitHub WierdApps
    • Il comprend trois exemples : fenêtre elliptique, fenêtre basée sur un bitmap et mascotte animée
    • Win32 permet toujours de créer des logiciels desktop créatifs et expérimentaux

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.