Get WindowRect Fonksiyonu
Bu fonksiyon herhangi bir
pencerenin koordinat bilgilerini elde etmekte kullanılır. Her zaman pixel
birimiyle çalışır ve koordinat sistemi her zaman desktop'ın sol üst köşesine
göredir. Prototipi:
GetWindowRect
fonksiyonunun orijin noktası bazı API fonksiyonlarıyla örtüşmeyebilir. Örneğin
en tipik problem şudur: Bir alt pencere belli bir miktar öteleneceği durum.
Desktop orijinli bir noktanın herhangi bir pencerenin çalışma alanına göre
koordinat dönüşümünün yapılabilmesi için
üst pencerenin desktop'a göre konumunun da bilinmesi gerekir. Bu dönüştürmeyi
otomatik olarak yapan iki API fonksiyonu vardır: ScreenToClient,
ClientToScreen.Prototipler:
ScreenToClient
fonksiyonunda fonksiyonun birinci parametresi pozisyonu belirlenecek pencerenin
handle değeridir. İkinci parametre dönüştürülen koordinat bilgisidir.
ClientToScreen
fonksiyonunun birinci parametresi ilgili pencerenin handle değeri, ikinci
parametresidesktop'a göre yeni parametre bilgileridir. Fonksiyonların birinci
parametreleri dönüşümü yapılmak istenen pencerenin handle değeridir. Örneğin
bir pencere içerisindeki (8,10) koordinatları pencerenin çalışma alanına göre
konum belirtsin. Biz bu noktayı desktop'a göre konum belirtecek hale
dönüştürmek istiyorsak fonksiyonu şöyle kullanmalıyız:
Pencere başlığı söz konusu ise GetClientRect ile aluınan koordinat
pencerenin sol üst köşesine ilişkindir.
Popup Menü İşlemleri
Herhangi bir yerde
görüntülenebilen menülere popup menü denir. Programın ana menüsü aslında bir
menü çubuğuna geçirilmiş bir grup popup menüden oluşmaktadır. Popup menünün bir
elemanı başka bir popup menü olabilir. Popup menü elemanları aktif, pasif, gri
ışıklı yapılabilir. Ya da herhangi bir menü elemanı "checked"
yapılabilir. Popup menüler Windows programlarında genellikle mouse'un sağ
tuşuna basıldığında görüntülenirler. Ya da genel olarak menü çubuğuna
iliştirilmiş olarak bulunurlar. Popup menülerle çalışabilmek için önce işletim
sisteminin popup menüsü için bir veri yapısı tahsis etmesi gerekir. Yani popup
menüler normal bir handle mekanizmasındaki gibi çalışırlar. Bir popup menünün
açılabilmesi için dört adımdan oluşan şu işlemlerin yapılması gerekir:
1. CreatePopupMenu API fonksiyonu ile popup menü için bir handle alınır.
2. AppendMenu ya da InsertMenu API fonksiyonlarıyla menüye eleman eklenir.
3. TrackPopupMenu API fonksiyonuyla popup menü görünür hale getirilir.
4. Menü için alınan handle(yani işletim sisteminin tahsis ettiği bölge)
DestroyMenu API fonksiyonuyla sisteme iade edilebilir.
Genellikle CreatePopupMenu
ve menüye eleman ekleme işlemleri WM_CREATE mesajında yalnızca bir kez yapılır.
Bu durumda menü WM_DESTROY mesajında bırakılabilir(WM_DESTROY zaten programın
bitmesi sırasında gönderildiğine göre bu işleme gerek olmayabilir).
TrackPopupMenu fonksiyonu ise program içerisinde herhangi bir yerde, örneğin
mouse'un sağ tuşuna basıldığında çağırılabilir.
Menülere Eleman Eklenmesi ve Insert Edilmesi
AppendMenu Fonksiyonunun Parametrik Yapısı
Fonksiyonun birinci
parametresi popup menünün handle değeridir. İkinci parametre menü elemanı
olarak eklenecek bilginin nasıl bir bilgi olduğunu belirtir. Girilecek
parametre değerlerinden bazıları şunlardır:
MF_STRING
|
Menü elemanı olarak bir yazı görüntülenecektir.
|
MF_BITMAP
|
Menünün bir elemanı bitmap olabilir. Bunu yapabilmek için bitmap çizilir
ve kaynak dosyada belirtilir. Daha sonra LoadBitmap fonksiyonuyla yüklenir ve
elde edilen handle değeri fonksiyonun üçüncü parametresinde verilir.
|
MF_CHECKED
|
Menü elemanı yanında checked şekliyle yaratılır.
|
MF_DISABLED
|
Menü elemanı pasif hale gelir. Pasif duruma gelmiş menü elemanı
seçilemez, yani seçilmeye çalışılsa mesaj göndermez. Ancak rengi gri
değildir.
|
MF_GRAYED
|
Menü elemanı pasif hale getirilir, rengi de gri gözükür. Böyle
oluşturulmuş menü elemanı disabled menü elemanını işlevsel olarak kapsar. Her
ikisinde de menü elemanı seçilemez, ancak grayed'de aynı zamanda elena gri
olarak gözükür.
|
AppendMenu fonksiyonunun
üçüncü parametresi menü elemanı seçildiğinde WM_COMMAND mesajına gönderilecek
menü ID değeridir. Eğer ikinci parametre MF_POPUP ise üçüncü parametre olarak
popup menünün handle değeri girilmelidir. Dördüncü parametresi menü elemanı
olarak görüntülencek yazıdır.
TrackPopupMenu Fonksiyonu
Fonksiyonun birinci
parametresi görüntülenecek popup menünün handle değeridir. İkinci parametre
popup menünün hizalanma biçimdir. Üçüncü ve dördüncü parametreler menünün
görüntüleneceği koordinat bilgisini içerir. Ancak bu koordinat bilgisi desktop
orijinlidir. ClientToScreen API fonksiyonuyla koordinat bilgisini dönüştürmek
gerekebilir. Beşinci parametre kullanılmamaktadır, sıfır girilmektedir. Altıncı
parametre popup menünün üzerinde görüntüleneceği pencereninin handle değeridir.
Aslında bu parametre WM_COMMAND mesjaının gönderileceği pencere
fonksiyonunu belirlemekte kullanılır.
Fonksiyonun son parametresi kullanılmamaktadır, NULL girilmelidir.
Popup Menülerde Seçilme İşlemi
Popup menüde bir seçim
yapıldığında tıpkı normal ana menü işlemlerinde olduğu gibi WM_COMMAND mesajı
LOWORD(wParam) menü elemanının ID değeri olacak şekilde çağırılır. Menü
elemanının "checked" ya da disabled durumlarının kontrolü otomatik
olarak yapılmaz, bu mesajlarda yapılmalıdır.
InsertMenu Fonksiyonu
Bu fonksiyon bir menü elemanını popup menünün
herhangi bir yerine ekleyerek yerleştirir. Fonksiyonun birinci parametresi
ekleme işleminin yapılacağı popup menü handle değeridir. İkinci parametresi
insert edilecek pozisyon numarasıdır. Bu değer sıfırdan başlar. Bu değer
-1(0xFFFFFFFF) ise sona ekleme işlemi yapılır. Üçüncü parametre insert
işleminin hangi ölçüte göre yapılacağını belirtir. MF_BYPOSITION insert
işleminin ilk eleman sıfır olmak üzere pozisyon numarasına göre yapılacağını
belirtir. Dördüncü parametre menü ID değeri ya da popup menü handle değeridir.
Son parametre menü yazısını belirtir.
Menü Elemanlarının "Checked" Yapılması
Menü elemanlarının checked
ya da unchecked yapılması CheckMenuItem API fonksiyonuyla yapılır.
Fonksiyonun birinci
parametresi check işleminin yapılacağı popup menü elemanıdır. İkinci parametre
check edilecek menü elemanının pozisyon numarası ya da ID değeridir. Check
edilme işleminin neye göre yapılacağı üçüncü parametrede tespit edilir. Üçüncü
parametre MF_CHECKED, MF_UNCHECKED biçiminde girilebilir. Bu değerlere ayrıca
MF_BYPOSITION veya MF_BYCOMMAND | operatörüyle kombine edilebilir. Örneğin
MF_CHECKED | MF_BYPOSITION. Default olarak bu parametre MF_BYCOMMAND seçilmiş
gibi işlem yapılır. Fonksiyonun geri dönüş değeri menü elemanının önceki
durumuna ilişkindir.
Bir
menü elemanının enable ve disable yapılması da benzer biçimde EnableMenuItem
fonksiyonuyla yapılmaktadır
0 yorum: