7 पॉइंट द्वारा GN⁺ 2026-04-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • आधुनिक Windows ऐप्स web-based framework पर निर्भरता की वजह से धीमे और भारी हो गए हैं, और पुराने Win32 दौर वाला operating system स्तर का नियंत्रण खो गया है
  • Win32 API में message loop और HRGN object के ज़रिए विंडो का आकार मनचाहे ढंग से तय किया जा सकता था, और non-standard window design आम थे
  • bitmap और layered window तकनीक का इस्तेमाल करके transparency और animation वाली मुक्त आकार की विंडो बनाई जा सकती थीं
  • लेकिन custom windows धीरे-धीरे गायब हो गईं क्योंकि उनमें सारी basic functionality हाथ से implement करनी पड़ती थी, और यूज़र्स की पसंद सरलता की ओर बदल गई
  • फिर भी Win32 आज भी window control और experimentation की आज़ादी देता है, और creative desktop software बनाने की संभावना बनाए रखता है

आधुनिक Windows ऐप्स की एकरसता और Win32 की खोई हुई आज़ादी

  • हाल के Windows desktop apps में ज़्यादातर React, Electron, Tauri जैसे browser wrapper के ऊपर चलते हैं, और धीमे तथा memory ज़्यादा खाने वाले जटिल web-based ढांचे में बदल गए हैं
    • एक साधारण notepad भी 50MB memory लेता है, जबकि शुद्ध Win32 C में लिखी वही functionality वाली app सिर्फ 1.8MB में चल जाती है
    • आधुनिक hardware पर भी Windows 11 boot होते समय memory usage 77% तक पहुंच जाता है
  • पहले जब सीधे Win32 API से programming की जाती थी, तब operating system स्तर का पूरा नियंत्रण हाथ में होता था
    • उस समय rectangular window तक सीमित रहने की ज़रूरत नहीं थी, और non-standard आकार की windows खुलकर बनाई जा सकती थीं
    • Windows XP के दौर में Windows Media Player समेत कई apps का रूप-रंग अलग और अनोखा होता था

अतीत की ‘अजीब आकार’ वाली विंडोज़

  • एक समय Windows apps को पहचान और व्यक्तित्व दिखाने के लिए कई तरह के आकारों में बनाया जाता था
    • media player hardware जैसे दिखते थे, desktop mascot स्क्रीन पर घूमते थे, और utility panel को instrument panel, खिलौने, alien console जैसी शक्ल दी जाती थी
    • विंडो का आकार rectangular होना ज़रूरी नहीं था, और UI का मकसद usability से ज़्यादा personality दिखाना होता था
  • आज ऐसे रूप कम दिखने का कारण यह है कि programmer अब विंडो को सीधे नियंत्रित नहीं करते
    • ज़्यादातर आधुनिक UI frameworks operating system को छिपा देते हैं, और developer सिर्फ सीमित rectangular area के भीतर ही काम करता है

Win32 की message-based संरचना और window control

  • Win32 programming का केंद्र event message loop है
    • GetMessage, TranslateMessage, DispatchMessage से बना loop हर व्यवहार की नींव है
    • “WM_CREATE”, “WM_PAINT”, “WM_SIZE”, “WM_DESTROY” जैसे messages को handle करके विंडो का व्यवहार तय किया जाता है
  • HRGN(Region Object) का उपयोग करके विंडो का आकार मनचाहे ढंग से बदला जा सकता है
    • SetWindowRgn से विंडो को कोई region दिया जाए तो वही हिस्सा वास्तविक विंडो माना जाता है
    • उदाहरण code में CreateEllipticRgn से elliptical window बनाई जाती है, और title bar के बिना drag functionality भी सीधे implement की जाती है
    • “WM_LBUTTONDOWN” के समय “WM_NCLBUTTONDOWN” को “HTCAPTION” के साथ भेजकर विंडो खिसकाने का व्यवहार नकल किया जाता है
  • यानी आकार बनाना आसान है, लेकिन framework जो basic features देता था उन्हें खुद implement करना ही असली चुनौती है

bitmap-आधारित windows और layered window

  • “drivenbyimage/main.c” उदाहरण में bitmap data से विंडो का आकार तय किया जाता है
    • “shape.bmp” लोड करके transparent color (magenta) को छोड़ बाकी pixels को window region बनाया जाता है
    • bitmap एक साथ स्क्रीन पर दिखने वाली image भी होता है और विंडो का वास्तविक आकार भी
    • पहले के skinned apps इसी तरीके से कुत्ता, spaceship, radio, character face जैसी कई आकृतियाँ बनाते थे
  • लेकिन bitmap-based region में किनारे कठोर होते हैं और semi-transparency संभव नहीं होती
    • मुलायम edges या animation के लिए layered window (WS_EX_LAYERED) की ज़रूरत होती है
  • “Animated/” उदाहरण में transparent alpha channel वाली 32-bit image को UpdateLayeredWindow से upload किया जाता है
    • GDI+ से memory bitmap पर sprite sheet draw करके frame बदले जाते हैं, और उसे desktop पर दिखाया जाता है
    • इसमें विंडो का आकार स्थिर नहीं रहता, बल्कि उस पल की pixel state ही विंडो का आकार बन जाती है
    • यह तरीका smooth transparency, frame-by-frame shape change, और natural animation को support करता है

custom windows की कठिनाई और सांस्कृतिक बदलाव

  • Win32 API से custom window बनाते समय हर बारीकी को खुद संभालना पड़ता है
    • drag, resize, close, keyboard input, DPI support जैसी वे सुविधाएँ जो सामान्य विंडो अपने-आप संभालती थी, उन्हें manually implement करना पड़ता है
    • prototype बनाना आसान हो सकता है, लेकिन उसे polished product में बदलने के लिए काफी लागत और मेहनत चाहिए
  • यूज़र्स ऐसे visual experiment की तुलना में stability और simplicity को ज़्यादा पसंद करने लगे
    • non-standard windows का रिश्ता अक्सर adware, toolbar, और बेकार utilities से जुड़ गया, जिससे उनकी छवि नकारात्मक हो गई
    • नतीजतन “अजीब आकार वाली विंडो” को serious software की बजाय खिलंदड़े तत्व की तरह देखा जाने लगा

Win32 की अब भी मौजूद संभावना और महत्व

  • इसके बावजूद Win32 आज भी सीधे नियंत्रण और experimentation की आज़ादी देता है
    • सिर्फ messages, handles, और drawing API के सहारे भी operating system स्तर का window control संभव है
    • ज़्यादातर मामलों में rectangular window व्यावहारिक है, लेकिन यह याद दिलाता है कि यह सिर्फ एक विकल्प है, कोई अनिवार्यता नहीं
  • उदाहरण code GitHub repository WierdApps में उपलब्ध है
    • इसमें elliptical window, bitmap-based window, और animated mascot जैसे तीन sample शामिल हैं
    • Win32 आज भी रचनात्मक और प्रयोगधर्मी desktop software बनाना संभव बनाता है

1 टिप्पणियां

 
GN⁺ 2026-04-16
Hacker News की राय
  • अजीब आकार वाली विंडो फिर वापस न आएँ तो बेहतर होगा
    सिर्फ इसलिए कि कुछ बनाया जा सकता है, इसका मतलब यह नहीं कि उसे बनाना ही चाहिए
    आजकल React, Electron, Tauri जैसे browser wrapper से बने ऐप्स सब एक जैसे दिखते हैं, क्योंकि वे OS के GUI framework का इस्तेमाल नहीं करते
    अगर ऐप अपने-अपने गैर-मानक widgets या रंग, आकार इस्तेमाल करें तो accessibility और usability खराब हो जाती है
    विडंबना यह है कि आजकल ‘identity’ पर ज़ोर देने वाले ऐप्स ज़्यादातर hardware manufacturers द्वारा ठूँसे गए driver control panel जैसे होते हैं, और वही सबसे खराब bloatware होते हैं

    • Electron उल्टा दूसरी समस्या पैदा करता है। हर ऐप अलग-अलग दिखता है और platform guidelines का पालन नहीं करता
    • accessibility कानूनी आवश्यकताओं से जुड़ा एक महत्वपूर्ण हिस्सा भी है। आधुनिक cross-platform GUI frameworks visual impairment वाले लोगों के लिए screen reader और HiDPI support अच्छी तरह संभालते हैं
    • फिर भी मुझे ऐसे अनोखे window shapes अच्छे लगते हैं। अगर कोई फिर से कोशिश करे तो मैं उसका स्वागत करूँगा
    • Vista के दौर में WPF और XAML से बने कई non-standard UI देखे थे, लेकिन window resize करने या monitor के बीच ले जाने पर scaling बुरी तरह टूट जाती थी, और आखिर में सिर्फ असुविधा ही बचती थी
    • मेरी राय बिल्कुल उलट है। मैं फिर से कंप्यूटर को मज़ेदार और कूल बनाना चाहता हूँ। अभी सब कुछ फाइल-फ़ोल्डर जैसा लगता है। ज़िंदगी की मज़ेदार चीज़ें वैसे भी मूल रूप से optional होती हैं
  • मुझे Win32 पसंद है, लेकिन मुझे लगता है कि पहले की अजीब skin संस्कृति आज की “branding = identity” सोच की पूर्वसूचना थी
    वही आगे चलकर Electron और आधे-अधूरे widget libraries की भरमार तक पहुँची
    Blender या Ardour जैसे विशेष ऐप्स न हों, तो अलग व्यक्तित्व वाला GUI प्राथमिकता नहीं है

    • Electron ऐप्स सब एक जैसे दिखते हैं। इसके विपरीत Winamp जैसी Win32 skins में कम-से-कम कुछ व्यक्तित्व तो था
      आज के OS व्यक्तिगत उपयोग के लिए नहीं, बल्कि enterprise के लिए हैं। Win3.1~XP era ही असली personal computing का दौर था
    • सामान्य office apps के लिए native controls का उपयोग सही है, लेकिन iPad या smart devices की तरह full-screen custom UI के मामले में यह बढ़िया और अच्छी तरह काम करता है
  • आज के React-आधारित apps में न OS के साथ, न आपस में कोई consistency है
    हर 6 महीने में UI बदल जाता है, लेकिन UX बेहतर नहीं होता। accessibility (a11y) को पूरी तरह भुला दिया गया है

  • पहले software कम लोग बनाते थे और उसे लंबे समय तक स्थिर रूप से maintain करते थे
    अब चीज़ें तेज़ iteration और बड़े teams के इर्द-गिर्द बदल गई हैं, और flat design इसी माहौल के अनुरूप निकला हुआ नतीजा है
    Skeuomorphic design में assets को लगातार फिर से बनाना पड़ता है, इसलिए इसकी लागत अधिक है
    आखिरकार यह speed और scale को प्राथमिकता देने वाला दौर बन गया है। जैसे हाथ से तराशी गई furniture की जगह flat-pack furniture का चलन हो गया हो

    • असल में Win32 API में भी सब कुछ खुद implement करने की ज़रूरत नहीं है। basic message handling को delegate किया जा सकता है
    • Skeuomorphic design में वास्तविकता की नकल कुछ ज़्यादा थी, इसलिए वह दिखने में जटिल और बिखरा हुआ लगता था। दिशा अच्छी थी, लेकिन implementation कठिन था
    • आखिर वजह cost cutting ही है। बेहतर usability छोड़कर कारों के buttons को बड़ी touchscreen से बदल देने जैसा
  • HiDPI के दौर में पहले की तरह pixel-level पर UI बनाना कठिन हो गया है
    Win95~XP के दौर में front buffer पर सीधे draw करना तेज़ था और memory भी कम लगती थी, लेकिन अब हर window के लिए backup buffer बनाए रखने पड़ते हैं, इसलिए RAM ज़्यादा लगती है

  • “The point was usually not usability. It was identity.” यह वाक्य पढ़कर लगा कि जैसे LLM ने लिखा हो

    • मुझे भी वही एहसास हुआ। फिर भी लगा कि लेखक कुछ कहना चाहता था
    • हर वाक्य LLM-generated जैसा लग रहा था
  • मैंने पहले Windows apps develop किए हैं, और Win32 interface पर लगभग 90% तक ही control मिल पाता था
    color theme बदलने की कोशिश में MessageBox को खुद reimplement करना पड़ा था, यह याद है

    • पहले Win32 Hook से MessageBox को modify किया जा सकता था। HCBT_CREATEWND से HWND लेकर subclassing कर लो
    • और गहराई में जाओ तो User32.dll की जगह Win32U.dll को hook करना पड़ सकता है
    • उसे खुद से फिर बनाना बहुत कष्टदायक है। सोचता हूँ Qt से शायद थोड़ा बेहतर हो
  • शुद्ध Win32 C में बना Notepad सिर्फ 1.8MB इस्तेमाल करता है, जबकि आजकल के memo apps 50MB तक लेते हैं

    • न्यूनतम “Hello World” program को भी 500KB चाहिए। system libraries डिफ़ॉल्ट रूप से memory ले लेती हैं
    • आधुनिक Windows 11 Notepad में tabs, styled text, और AI features भी हैं, इसलिए वह base में 32MB लेता है
      यहाँ तक कि GNU Emacs भी उससे कम memory इस्तेमाल करता है
      दूसरी ओर text-mode EDIT.EXE सिर्फ 520KB लेता है, इसलिए वह कहीं अधिक efficient है
  • पहले Mac के लिए Disco नाम का CD burning app था, जिसमें disc burn होने के दौरान window के ऊपर धुआँ उठने वाली animation दिखती थी
    Steve Jobs ने उसे मंच पर खुद दिखाया था और उसे पसंद किया था

  • लेख में desktop mascots की बात आना भी अच्छा लगा
    हाल ही में Godot से बना desktop pet वीडियो देखा, जो cross-platform चलता है
    थोड़ा मेहनत वाला ज़रूर है, लेकिन Win32-स्तर की जटिलता नहीं है। desktop pet enthusiasts के लिए यह अच्छा विकल्प है