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