2.8.07

Fundamental Pemrograman Windows

Saya tertarik untuk membahas sedikit (atau mungkin banyak?) tentang pemrograman Windows dengan langsung mengakses API yang tersedia.

Sekilas tentang pemrograman Windows, terlepas dari apa bahasa pemrograman yang digunakan dan dengan cara apa. Ada 2 cara untuk membuat program tersebut.
1.  Mengakses langsung API yang tersedia
2. Menggunakan class library yang mengenkapsulasi API

Banyak perdebatan tentang mana yang lebih baik dari 2 cara / metode di atas.
Saya akan coba sedikit mengulas secara obyektif tentang pro dan kontranya.
1. Mengakses langsung API
Pro:
  • Memberikan kita pengertian yang mendalam tentang apa yang kita bangun (banyak kejadian dimana programmer tidak tahu kenapa kok ini bisa begini atau itu bisa begitu, yang penting apa yang saya inginkan bisa jalan/jadi)
Kontra:
  • Banyak orang berpendapat bahwa mengakses langsung API sangat tidak praktis (kenapa harus repot kalau kita bisa menggunakan class library yang telah tersedia)
2. Menggunakan class library yang mengenkapsulasi API
Pro:
  • Memudahkan pemrograman (tidak perlu membuat "tangan kita kotor" dengan detail - detail pemrograman)
  • Otomatis membuat development time menjadi berkurang
Kontra:
  • Kurangnya pemahaman (yang mendetail) tentang apa yang terjadi di dalam suatu proses pembangunan software maupun produk jadinya.

Saya tidak akan membahas terlalu jauh tentang hal ini, silahkan googling untuk informasi lebih detail.
Untuk sharing (saya suka kata ini :) ) saya kali ini, saya fokus dengan cara / metode #1.

Perlu juga saya bahas sedikit tentang dasar pemrograman di lingkungan Windows.
Sebelumnya saya hendak bertanya bagaimana software/program yang kita bangun berinteraksi dengan Windows? Bagaimana caranya Windows atau program kita, menterjemahkan, katakanlah setiap klik pada mouse ? Bagaimana proses sebenarnya dari program stock & inventory yang kita bangun, yang memungkinkan kita untuk menekan tombol tertentu dan data barang bisa ditampilkan pada kontrol tertentu (contoh: Listview) ?
Apakah ada suatu proses yang terjadi di balik proses klik pada mouse atau penekanan tombol? atau memang terjadi begitu saja? :) 

Proses sebenarnya yang terjadi adalah komunikasi antara program yang kita bangun (dan tentu saja sedang kita jalankan) dengan Windows.
Windows yang memulai proses komunikasi, Windows akan mengirimkan message/pesan ke setiap event yang terjadi kepada program yang sedang kita jalankan. Setelah menerima pesan tersebut, program akan menterjemahkan message/pesan tersebut dan kemudian memberikan respon. Setelah merespon Windows, program akan kembali menunggu untuk message/pesan berikutnya dari Windows.

Seperti pada contoh di atas dimana pengguna program stock & inventory menekan tombol tertentu untuk menampilkan data barang. Windows mendeteksi ada suatu peristiwa dimana suatu tombol pada suatu program sedang ditekan, kemudian Windows langsung mengirimkan message/pesan kepada program yang bersangkutan, dalam hal ini message yang diberikan adalah WM_COMMAND (akan kita bahas kemudian).
Program menerima message/pesan, menterjemahkan message/pesan tersebut, lalu memberikan respon, yaitu menampilkan data barang.

Setelah kita mengetahui bagaimana Windows dan program yang sedang kita jalankan berinteraksi, kita akan masuk sedikit lebih dalam lagi.

Bagi yang memiliki pengalaman atau pernah membuat program dengan bahasa pemrograman C,C++,D pasti sudah tidak asing lagi dengan fungsi main(), dimana seluruh proses akan dimulai dari fungsi ini. 
Sama dengan konsep ini, seluruh program Windows dimulai dari fungsi ini, namun dengan nama yang sedikit berbeda, yaitu WinMain().
Fungsi WinMain() memiliki perbedaan dibanding fungsi - fungsi lain. WinMain menggunakan WINAPI sebagai calling convention.
Nilai kembalian dari WinMain() harus bertipe int.

Kita lanjut ke fungsi berikutnya. Setiap program Windows harus memiliki fungsi yang dikhususkan untuk Windows, melalui fungsi inilah seluruh proses komunikasi antara Windows dan program yang kita buat terjadi. Fungsi ini biasanya dipanggil sebagai window procedure.
Message/pesan dari Windows (seperti yg kita bahas di atas) diterjemahkan dan diolah di fungsi ini. Seluruh window procedure harus mengembalikan nilai dengan tipe LRESULT CALLBACK. LRESULT sendiri adalah 32-bit int, sedangkan CALLBACK calling convention
digunakan oleh seluruh fungsi yang dipanggil/dikirimkan pesan oleh Windows.

Setelah kita mengetahui bahwa seluruh program Windows dimulai dari fungsi yang bernama WinMain() dan kemudian window berkomunikasi dengan program melalui window procedure. Berikutnya adalah window class.
Mungkin mendengar kata class di sini, kita langsung terpikir dengan class yang ada dalam bahasa pemrograman yang berorientasi object seperti C++. Apakah class yang ini yang dimaksud?
Tidak. Window class di sini lebih dimaksudkan dengan style atau tipe. Lalu apa itu style atau tipe ini?
Katakanlah kita mau membuat sebuah window seperti pada gambar di bawah. 
Kita tentukan warna backgroundnya putih, window icon nya adalah icon standard aplikasi, dst.



Setelah window class, selanjutnya adalah message loop
Seperti sudah dibahas di atas bahwa Windows dan program yang kita jalankan berkomunikasi melalui message/pesan, dan bahwa Windows akan mengirimkan message/pesan kepada program untuk setiap event yang terjadi. Setelah menerima message/pesan dari Windows dan meterjemahkan/mengolahnya maka program akan berada dalam posisi menunggu kembali.
Message loop terdapat didalam fungsi WinMain().

OK, cukup teorinya. Saya akan lanjutkan dengan praktek.

31.7.07

Akhirnya oh akhirnya..

Setelah 6 tahun lebih sedikit! (saya daftarkan account di blogspot ini tahun 2001)

Saya sudah ndak sanggup menahan godaan untuk nge-blog untuk numpahin pikiran teknis dan mungkin beberapa lame mini howto. Lagian sekarang ini lumayan santai juga. (baca: santai banget!)
Hehe.. hitung - hitung kalau disuruh buat daftar kegiatan.. nambah satu, selain:
1. Nganterin nyonya besar
2. Ngebunuhin kutu di beberapa software buatan sendiri
3. Berenang (ya berenang :P)
4. Ngejemput lagi nyonya besar
Kalau dipikir - pikir lagi.. gila juga.. 24 jam cuma diisi sama 4 kegiatan doang! (selain buang air, makan, tidur tentunya)
Mau jadi apa kalau begini?!

Padahal oh padahal, 2007 (seperti juga tahun - tahun sebelumnya) penuh dengan target - target yang kalau dilaksanain bakalan ngerasain "so little time so much to do". 
Nyatanya malahan jadi "so much time to do nothing". Gile bener!
Mana sudah tengah tahun lagi..
Mau jadi apa kalau begini?!

Semoga ndak terlambat, semoga!