7 points par GN⁺ 2026-04-16 | 1 commentaires | 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

1 commentaires

 
GN⁺ 2026-04-16
Réactions sur Hacker News
  • J’aimerais que les fenêtres aux formes bizarres ne reviennent jamais
    Ce n’est pas parce qu’on peut faire quelque chose qu’on doit le faire
    Si les applis construites aujourd’hui avec des wrappers de navigateur comme React, Electron, Tauri se ressemblent toutes, c’est parce qu’elles n’utilisent pas les frameworks GUI de l’OS
    Quand une appli utilise ses propres widgets non standard, couleurs ou formes, cela ruine l’accessibilité et l’utilisabilité
    Ironiquement, les applis qui insistent aujourd’hui sur leur « identité » sont surtout des panneaux de contrôle de pilotes ajoutés par les fabricants de matériel, et c’est le pire bloatware qui soit

    • Electron crée plutôt le problème inverse. Toutes les applis ont chacune une apparence différente et ne suivent pas les guidelines de la plateforme
    • L’accessibilité est un sujet important, avec aussi des obligations légales. Les frameworks GUI cross-platform modernes gèrent bien les lecteurs d’écran pour les personnes malvoyantes ainsi que le support HiDPI
    • Malgré tout, je trouve ces formes de fenêtres atypiques cool. Si quelqu’un veut réessayer, tant mieux
    • À l’époque de Vista, j’ai vu beaucoup d’UI non standard faites avec WPF et XAML, et dès qu’on redimensionnait la fenêtre ou qu’on la déplaçait vers un autre écran, le scaling partait en vrille, donc au final il ne restait que l’inconfort
    • Je pense exactement l’inverse. J’aimerais rendre l’informatique amusante et cool comme avant. Aujourd’hui, tout ressemble à un classeur. Les aspects amusants de la vie ont toujours été optionnels
  • J’aime Win32, mais je pense que l’ancienne culture des skins étranges annonçait déjà la logique actuelle du « branding = identité »
    Cela a fini par mener à la prolifération d’Electron et de bibliothèques de widgets à moitié finies
    À moins d’être une appli spécialisée comme Blender ou Ardour, une GUI avec de la personnalité n’est pas prioritaire

    • Les applis Electron se ressemblent toutes. À l’inverse, les skins Win32 de Winamp avaient au moins une certaine personnalité
      Les OS actuels ne sont plus faits pour les particuliers mais pour les entreprises. L’époque de Win3.1 à XP était le vrai temps de l’informatique personnelle
    • Pour une appli bureautique classique, il faut utiliser des contrôles natifs, mais dans les cas où l’on utilise un UI entièrement personnalisé en plein écran, comme sur iPad ou appareil intelligent, cela peut être superbe et bien fonctionner
  • Les applis modernes basées sur React ne sont cohérentes ni avec l’OS ni entre elles
    L’UI change tous les six mois sans que l’UX s’améliore. L’accessibilité (a11y) est complètement oubliée

  • Avant, les logiciels étaient créés par de petites équipes et maintenus de façon stable pendant longtemps
    Aujourd’hui, on est passé à des itérations rapides et à de grandes équipes, et le flat design est le résultat adapté à cet environnement
    Le design skeuomorphique coûte cher parce qu’il faut sans cesse recréer les assets
    Au final, on est entré dans une époque où la vitesse et l’échelle priment, un peu comme quand les meubles en kit plats deviennent la norme à la place des meubles sculptés à la main

    • En réalité, même avec l’API Win32, il n’est pas nécessaire de tout implémenter soi-même. Il suffit de déléguer le traitement des messages par défaut
    • Le design skeuomorphique imitait trop le réel, ce qui le rendait visuellement complexe et brouillon. L’idée allait dans le bon sens, mais elle était difficile à mettre en œuvre
    • Au fond, la raison est la réduction des coûts. On renonce à une meilleure utilisabilité, comme lorsqu’on remplace les boutons d’une voiture par un grand écran tactile
  • Avec l’ère du HiDPI, il est devenu difficile de dessiner l’UI au pixel près comme autrefois
    À l’époque de Win95 à XP, on pouvait dessiner directement dans le front buffer, ce qui était rapide et consommait peu de mémoire, alors qu’aujourd’hui il faut maintenir un buffer de secours pour chaque fenêtre, ce qui utilise plus de RAM

  • En voyant la phrase « The point was usually not usability. It was identity. », j’ai eu l’impression de lire un texte écrit par un LLM

    • J’ai eu la même impression. Cela dit, on sentait quand même que l’auteur voulait exprimer quelque chose
    • Chaque phrase donnait l’impression d’avoir été générée par un LLM
  • J’ai développé des applis Windows autrefois, et l’interface Win32 n’était contrôlable qu’à 90 % environ
    Je me souviens avoir dû réimplémenter MessageBox pour essayer de changer le thème de couleurs

    • À l’époque, on pouvait modifier MessageBox avec un hook Win32. Il suffisait de récupérer le HWND avec HCBT_CREATEWND puis de faire du subclassing
    • En allant plus loin, il faut parfois hooker Win32U.dll au lieu de User32.dll
    • Le recréer soi-même est une vraie souffrance. Je me demande si ce serait un peu mieux avec Qt
  • Le Notepad écrit en pur C Win32 n’utilise que 1,8 Mo, alors qu’un bloc-notes moderne en prend 50 Mo

    • Même un programme « Hello World » minimal nécessite déjà 500 Ko. Les bibliothèques système occupent de la mémoire par défaut
    • Le Notepad de Windows 11 moderne inclut des onglets, du texte stylé et même des fonctions d’IA, donc il consomme 32 Mo de base
      Même GNU Emacs utilise moins de mémoire
      À l’inverse, EDIT.EXE en mode texte ne prend que 520 Ko, donc il est bien plus efficace
  • Il existait autrefois sur Mac une appli de gravure de CD appelée Disco, qui affichait une animation de fumée montant au-dessus de la fenêtre pendant la gravure
    Steve Jobs l’avait lui-même montrée sur scène et l’aimait beaucoup

  • J’étais aussi content de voir l’article parler des mascottes de bureau
    J’ai récemment vu une vidéo d’un desktop pet créé avec Godot, qui fonctionne en cross-platform
    Cela demande un peu de travail manuel, mais ce n’est pas aussi complexe qu’au niveau de Win32. Pour les amateurs de desktop pets, c’est une bonne option