Pulldown Menülerle Özel İşlemlerin Yapılması
işletim |
Bir programın menüsüne
ilişkin popup menü handle'ları elde edilebilir. Örneğin bir programın ana
menüsü içerisindeki bir menü elemanının "checked" yapılabilmesi için
o menü elemanının ilişkin olduğu popup pencerenin handle değeri gerekir. Bir
pulldown menü sisteminin bir popup penceresinin handle değerini elde edebilmek
için GetSubMenu API fonksiyonu kullanılır. Prototipi:
HMENU GetSubMenu (
Fonksiyonun birinci parametresi pulldown menünün handle değeridir. Bu
handle değeri menü LoadMenu ile yüklenirken elde edilen geri dönüş değeridir.
İkinci parametre ilk popup menü sıfır olmak üzere menü sisteminin kaçıncı popup
menüsünün handle'ının elde edileceğini bildirir. Fonksiyon pulldown menünün
istenen popup menüsünün handle'ıyla geri döner.
Bir pulldown menü herhangi
bir biçimde yüklenmiş ise o menünün handle değeri GetMenu API fonksiyonuyla
alınabilir.
Bir pılldown menünün
handle değeri kullanılarak da doğrudan herhangi bir popuptaki menü elemanı
"checked" yapılabilir. Bunun için CheckMenuItem ya da EnableMenuItem
fonksiyonlarında handle değeri olarak pulldown menünün handle değerini girmek
gerekir. Ancak bu yöntemde MF_BYPOSITION belirlemesinin bir anlamı kalmaz.
Pulldown menü WNDCLASS yapısının lpszMenuName elemanı set edilerek de açılmış
olabilir. Bu durumda handle değeri GetMenu fonksiyonuyla alınabilir.
Kaynaktan Hareketle Popup Menü Açılması
Popup menü elemanlarını
kaynakta belirterek açma işlemi yapılabilir. Bunun için:
1. Kaynakta bir pulldown menü kaynağı oluşturulur.
2. LoadMenu ile handle elde edilir.
3. GetSubMenu fonksiyonuyla sıfırıncı popup menü elde edilir.
4. TrackPopupMenu ile menü görüntülenir.
Aslında CheckMenuItem,
EnableMenuItem, AppendMenu, InsertMenu fonksiyonları hem pulldown menü hem de
popup menü sistemleri için çalışabilmektedir.
DLL Kullanımı
DLL'ler Windows işletim
sisteminin kullandığı dinamik kütüphane dosyalarıdır. İşletim sistemlerinde
dinamki ve statik olmak üzere ikiye ayrılır. Statik kütüphane dosyalarının
uzantısı lib, dinamik kütüphane dosyalarının uzantısı dll biçimindedir.
Statik Kütüphane Sistemi Nasıldır?
Lib dosyaları obj
modüllerden oluşmuştur. Obj modüllerinin içerisinde derlenmiş modüller vardır.
Statik kütüphanelere ekleme fonksiyonlar düzeyinde yapılmaz. Fonksiyonlar bir
obj dosya içinde bulunur, obj dosya kütüphaneye eklenir. Bir statik
kütüphaneden fonksiyon çağırıldığında derleyici bu fonksiyonu obj modülü
içerisine yazar, linker çağırılan fonksiyonu önce proje içerisindeki diğer
modüllerde arar, eğer burada bulamazsa proje içerisinde belirtilen lib
dosyalarında da arar. Linker bir fonksiyonu lib dosyası içerisinde bulursa
fonksiyonun bulunduğu obj modülün hepsini exe dosyasının içerisine yazar.
Statik kütüphane sisteminde çağırılan her fonksiyonun exe dosya içerisine
yazılması Windows gibi bir sistemde etkin bir çözüm değildir. Örneğin eğer API
fonksiyonları lib dosyalar içerisinde olsaydı, her program en azından en temel
API fonksiyonlarının kodlarını exe dosya içerisinde içermek zorunda kalacaktı.
Böylelikle disk kullanım oranı büyük ölçüde düşecekti. Bunun çözümü dinamik
kütüphane sistemlerindedir.
Dinamik Kütüphaneler
Dinamik kütüphanelerde
tıpkı statik kütüphanelerde olduğu gibi fonksiyon barındırır. Ancak temel bir
farklılıkları vardır. Dinamik bir kütüphaneden bir fonksiyon çağırıldığında
linker kodu exe dosyanın içerisine yazmaz. Exe dosya içeirisinde özel bir
bölüme fonksiyonun hangi dll içerisinde olduğunu yazar. Exe dosya
çalıştırılacağı zaman Windows'un yükleyici programı exe dosya ile birlikte bu
exe dosyanın kullandığı dll dosyalarını da belleğe yükler. Programın çalışma
zamanı sırasında dll içerisinde bulunan fonksiyonların çalışması sırasında akış
dll dosyasının içerisine girerek buradaki fonksiyonu çalıştırır. Windows
işletim sisteminde belleğe bağımsız olarak yüklenebilen exe ve dll dosyalarına
genel olarak modül denilmektedir.
Statik ve Dinamik Kütüphane Sistemlerinin
Karşılaştırılması
1. Dll fonksiyonları exe dosyaları içerisine yazılmadığından exe dosyaların
diskte kapladığı toplam alan azalır.
2. Dinamik kütüphane kullanan bir programın başka bir makinada
çalıştırılabilmesi için exe dosyasının yanı sıra dll dosyalarının da taşınması
gerekir.
3. Dinamik kütüphane sisteminin kullanılabilmesi için sistemin bir sanal
bellek mekanizmasına sahip olması, yani genel olarak bellek probleminin
olmaması gerekir. Çünkü bir dll'den birtek fonksiyon bile çağırılacak olsa
bütün modül belleğe yüklenmek zorundadır.
4. Dinamik kütüphaneler bir programdaki kısmi değişikliklerin kolay
yapılabilmesine olanak tanır. Yani exe dosyaya dokunmadan yalnızca yeni bir
dll'in eskisiyle değiştirilmesiyle kısmi değişiklikler sağlanabilir.
5. Dinamik kütüphane kullanan bir programın yükleme zamanı göreli olarak
daha uzundur.
Windows'un tüm API
fonksiyonları dll modülleri içerisindedir. API fonksiyonlarına ilişkin statik
bir kütüphane yoktur.
0 yorum: