seo menü özel işlemi

2 Temmuz 2013 Salı Unknown 0 yorum

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: