Translate

Tuesday, August 23, 2016

PEMROGRAMAN API [The Window Procedure]



PEMROGRAMAN API [The Window Procedure]

n  Windows tidak mengetahui apapun tentang event
n  Hal ini dikirimkan ke VB untuk menyembunyikan cara sebenarnya bagaimana Windows menginformasikan window anda bahwa terjadi sesuatu kepadanya
n  Dalam kasus ini, VB menjadi sebuah interpreter dan mengubah bahasa Windows kedalam VB.
n  Misalnya anda menginginkan untuk mengetahui kapan user menghighlights menu
n  VB tidak menyediakan event ini
n  Anda menjumpai beberapa program yang ada saat ini bisa menampilkan perubahan text di statusbar sesuai dengan menu item yang dihighlights.
n  Bagaimana caranya?
n  Setiap window mempunyai procedure khusus
n  Dinamai window procedure
n  Yang merupakan callback function
n  Function ini mengirimkan pesan setiap terjadi event di window anda
n  Message tersebut (WM_COMMAND) dikirimkan ketika menu item dihighlight
n  Mengapa kita tidak melihat pesan ini?
n  Karena VBlah yang membuat window procedure, bukan kita
n  Ketika Windows mengirim message, procedure ini men-dispacth-nya ke beberapa event tertentu
n  dan menconvert parameternya ke dalam bentuk yang lebih mudah.
n  Akan tetapi di beberapa kasus, procedure ini mengabaikan beberapa message
n  Sehingga kita tidak menerima input yang sesungguhnya
n  Jika anda benar-benar membutuhkan message ini, anda harus melakukan subclass terhadap window anda
n  Contoh deklarasi callback window procedure:
                Function WindowProc
                (              ByVal Hwnd As Long,
                                ByVal wMsg As Long,
                                ByVal wParam As Long,
                                ByVal lParam As Long
                ) As Long
n  Parameter pertama adalah window handle
n  wMsg adalah message identifier (WM_COMMAND atau WM_MOUSEMOVE)
n  wParam dan IParam adalah 32 bit values yang isinya bergantung pada type message yang dikirimkan
SubClassing
n  Anda menginginkan sesuatu yang lebih
n  VB tidak memberikan sesuai dengan harapan anda
n  Atau anda ingin mengetahui sesuatu yang lebih terhadap window anda
n  Lakukan subclassing
n  Subclassing adalah mengganti active window procedure dengan yang baru
n  Procedure ini akan menerima semua message yang datang sebelum procedure yang lama
n  Procedure yang lama masih ada
n  Procedure yang lama dipanggil dalam procedure yang baru
n  Subclassing dilakukan dengan jalan memanggil SetWindowLong.
n  Function ini mengubah atribut tertentu dari window yang ada
n  Contoh:
                Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
                (              ByVal hwnd As Long,
                                ByVal nIndex As Long,
                                ByVal dwNewLong As Long
                ) As Long
n  Parameter pertama menentukan window mana yang akan diSubClassing-kan
n  Parameter kedua adalah GWL_WNDPROC
n  Ketiga adalah alamat dari window procedure yang baru
n  Function tadi akan dipanggil setiap kali window tersebut mengalami focus
n  Dan juga ketika terjadi sesuatu didalamnya
n  Dan juga kasus lainnya (misalnya perubahan beberapa parameter sistem oleh proses yang lain)
n  SetWindowLong mereturn nilai 0 jika terjadi error atau alamat lama window procedure
n  Alamat ini penting dan sebaiknya disimpan di variabel tertentu
n  Yaitu digunakan untuk memanggil lagi procedure lama bila kita tidak memproses message
n  Hanya 1% dari semua message yang diproses, sisanya dihandle oleh procedure lama

No comments:

Post a Comment

silahkan membaca dan berkomentar