- Aplikasi Windows modern menjadi lambat dan berat karena ketergantungan pada framework berbasis web, dan kendali tingkat sistem operasi yang dulu ada pada era Win32 pun hilang
- Dengan Win32 API, bentuk jendela bisa ditentukan secara bebas melalui message loop dan objek HRGN, sehingga desain jendela nonstandar dulu cukup umum
- Dengan bitmap dan teknologi layered window, dimungkinkan membuat jendela berbentuk bebas dengan transparansi dan animasi
- Namun, jendela kustom perlahan menghilang karena kompleksitas harus mengimplementasikan sendiri semua fungsi dasar serta perubahan preferensi pengguna yang lebih menyukai kesederhanaan
- Meski begitu, Win32 masih memberi kebebasan kontrol dan eksperimen serta mempertahankan kemungkinan membuat software desktop yang kreatif
Monotonnya aplikasi Windows modern dan kebebasan Win32 yang hilang
- Belakangan ini, sebagian besar aplikasi desktop Windows berjalan di atas pembungkus browser seperti React, Electron, Tauri, dan berubah menjadi struktur kompleks berbasis web yang lambat serta boros memori
- Bahkan Notepad sederhana pun memakan 50MB memori, sementara aplikasi dengan fungsi yang sama yang ditulis dalam Win32 C murni hanya 1.8MB
- Bahkan pada hardware modern, penggunaan memori saat boot Windows 11 mencapai 77%
- Pada masa ketika orang memprogram langsung dengan Win32 API, tersedia kendali penuh di tingkat sistem operasi
- Saat itu, aplikasi tidak terkungkung pada jendela persegi panjang, dan jendela dengan bentuk nonstandar bisa dibuat dengan bebas
- Pada era Windows XP, berbagai aplikasi termasuk Windows Media Player memiliki tampilan yang khas
Jendela ‘berbentuk aneh’ di masa lalu
- Dulu, aplikasi Windows dibuat dalam berbagai bentuk untuk mengekspresikan identitas dan kepribadian
- Pemutar media dibuat agar terlihat seperti perangkat keras, maskot desktop berjalan-jalan di layar, dan panel utilitas didesain seperti panel instrumen, mainan, atau konsol alien
- Bentuk jendela tidak harus persegi panjang, dan tujuan UI lebih dekat ke keunikan daripada kegunaan
- Alasan bentuk seperti ini hilang sekarang adalah karena programmer tidak lagi mengendalikan jendela itu sendiri
- Sebagian besar framework UI modern menyembunyikan sistem operasi, dan pengembang hanya bekerja di dalam area persegi panjang yang terbatas
Struktur berbasis pesan Win32 dan kontrol jendela
- Inti pemrograman Win32 ada pada event message loop
- Loop yang terdiri dari
GetMessage, TranslateMessage, DispatchMessage menjadi dasar dari seluruh perilaku
- Perilaku jendela didefinisikan dengan menangani pesan seperti “WM_CREATE”, “WM_PAINT”, “WM_SIZE”, “WM_DESTROY”
- Dengan HRGN(Region Object), bentuk jendela bisa diubah secara bebas
- Jika area ditetapkan ke jendela dengan
SetWindowRgn, hanya area itu yang akan dikenali sebagai jendela sebenarnya
- Dalam contoh kode,
CreateEllipticRgn digunakan untuk membuat jendela elips, dan fungsi drag diimplementasikan langsung tanpa bilah judul
- Saat “WM_LBUTTONDOWN”, “WM_NCLBUTTONDOWN” dikirim dengan “HTCAPTION” untuk meniru perpindahan jendela
- Seperti ini, membentuk tampilannya memang mudah, tetapi tantangan utamanya adalah semua fungsi yang dulu disediakan frame dasar harus diimplementasikan sendiri
Jendela berbasis bitmap dan layered window
- Contoh “drivenbyimage/main.c” mendefinisikan bentuk jendela dengan data bitmap
- “shape.bmp” dimuat lalu piksel selain warna transparan (magenta) dijadikan area jendela
- Bitmap sekaligus berfungsi sebagai gambar yang digambar ke layar dan bentuk nyata jendela
- Aplikasi bergaya skin di masa lalu menggunakan cara ini untuk membuat bentuk seperti anjing, pesawat luar angkasa, radio, atau wajah karakter
- Namun, area berbasis bitmap memiliki batas yang keras dan tidak bisa menampilkan semi-transparansi
- Untuk tepi yang halus atau animasi, dibutuhkan layered window (WS_EX_LAYERED)
- Dalam contoh “Animated/”, gambar 32-bit dengan alpha channel transparan diunggah ke
UpdateLayeredWindow
- Dengan GDI+, sprite sheet digambar ke bitmap memori untuk mengganti frame, lalu ditampilkan ke desktop
- Bentuk jendela tidak lagi tetap, melainkan keadaan piksel saat ini itulah bentuk jendelanya
- Cara ini mendukung transparansi halus, perubahan bentuk per frame, dan animasi yang alami
Sulitnya jendela kustom dan perubahan budaya
- Saat membuat jendela kustom dengan Win32 API, semua perilaku detail harus ditangani sendiri
- Drag, resize, tutup, input keyboard, respons DPI, dan fungsi-fungsi yang biasanya otomatis ditangani jendela standar semuanya harus diimplementasikan manual
- Prototype mudah dibuat, tetapi menyempurnakannya menjadi produk matang membutuhkan biaya dan usaha besar
- Pengguna pun menjadi lebih menyukai stabilitas dan kesederhanaan daripada eksperimen visual semacam itu
- Jendela nonstandar sering diasosiasikan dengan adware, toolbar, atau utilitas yang tidak perlu, sehingga muncul persepsi negatif
- Akibatnya, “jendela berbentuk aneh” lebih dianggap sebagai elemen main-main daripada software yang serius
Kemungkinan Win32 yang masih bertahan dan maknanya
- Meski begitu, Win32 tetap menyediakan kendali langsung dan kebebasan bereksperimen
- Hanya dengan message, handle, dan drawing API, kontrol jendela di tingkat sistem operasi tetap dimungkinkan
- Dalam kebanyakan kasus, jendela persegi panjang memang masuk akal, tetapi ini mengingatkan bahwa bentuk itu hanyalah pilihan, bukan keharusan
- Kode contoh dipublikasikan di repositori GitHub WierdApps
- Termasuk tiga sampel: jendela elips, jendela berbasis bitmap, dan maskot beranimasi
- Win32 masih memungkinkan pembuatan software desktop yang kreatif dan eksperimental
1 komentar
Komentar Hacker News
Saya harap jendela dengan bentuk aneh tidak kembali lagi
Hanya karena sesuatu bisa dibuat bukan berarti harus dibuat
Fakta bahwa aplikasi masa kini yang dibuat dengan pembungkus browser seperti React, Electron, Tauri semuanya terlihat mirip adalah karena mereka tidak memakai framework GUI bawaan OS
Jika aplikasi memakai widget non-standar atau warna dan bentuk yang berbeda-beda, aksesibilitas dan kemudahan pakai jadi rusak
Ironisnya, aplikasi masa kini yang menekankan “identitas” kebanyakan adalah panel kontrol driver yang disisipkan pabrikan perangkat keras, dan itulah bloatware paling buruk
Saya suka Win32, tetapi saya melihat budaya skin aneh di masa lalu sebagai pertanda awal dari pola pikir “branding = identitas” saat ini
Itu pada akhirnya berujung pada menjamurnya Electron dan pustaka widget yang setengah jadi
Kecuali untuk aplikasi khusus seperti Blender atau Ardour, GUI yang penuh kepribadian bukan prioritas utama
OS saat ini bukan lagi untuk personal, melainkan untuk perusahaan. Era Win3.1~XP adalah masa komputasi personal yang sesungguhnya
Aplikasi berbasis React masa kini tidak konsisten, baik dengan OS maupun satu sama lain
UI berubah setiap 6 bulan, tetapi UX tidak membaik. Aksesibilitas (a11y) benar-benar terlupakan
Dulu perangkat lunak dibuat oleh sedikit orang dan dipelihara stabil dalam waktu lama
Sekarang semuanya berubah menjadi iterasi cepat dan tim besar, dan desain datar adalah hasil yang cocok untuk lingkungan seperti ini
Desain skeuomorphic mahal karena asetnya harus terus dibuat ulang
Pada akhirnya ini menjadi zaman yang mengutamakan kecepatan dan skala, seperti ketika furnitur pahatan tangan digantikan oleh furnitur rakit datar
Memasuki era HiDPI, menggambar UI per piksel seperti dulu menjadi sulit
Pada masa Win95~XP, kita bisa menggambar langsung ke front buffer sehingga cepat dan hemat memori, tetapi sekarang RAM lebih banyak dipakai karena setiap jendela harus menjaga buffer cadangan masing-masing
Saat melihat kalimat “The point was usually not usability. It was identity.”, saya merasa seperti sedang membaca tulisan yang dibuat LLM
Saya dulu mengembangkan aplikasi Windows, dan antarmuka Win32 hanya bisa dikendalikan sekitar 90%
Saya ingat pernah harus mengimplementasikan ulang MessageBox sendiri saat mencoba mengubah tema warna
Notepad yang dibuat dengan C Win32 murni hanya memakai 1.8MB, sedangkan aplikasi memo masa kini memakai 50MB
Bahkan GNU Emacs memakai memori lebih sedikit
Sebaliknya, EDIT.EXE mode teks hanya memakai 520KB sehingga jauh lebih efisien
Dulu ada aplikasi pembakar CD di Mac bernama Disco, dan saat sedang membakar disk, ada animasi asap mengepul di atas jendelanya
Steve Jobs pernah menunjukkannya langsung di panggung dan menyukainya
Saya senang artikel itu juga membahas maskot desktop
Baru-baru ini saya melihat video desktop pet yang dibuat dengan Godot, dan itu berjalan lintas platform
Memang agak butuh usaha, tetapi tidak serumit Win32. Bagi penggemar desktop pet, itu pilihan yang bagus