WM_USER Mesajları
| işletim |
Windows'un önceden
belirlenmiş olan WM_ mesajları 0 ile 0x0400 arasında bulunmaktadır. Ancak
programcı isterse kendi mesaj numaralarıyla da işlem yapabilir. Bunun için
windows.h içerisinde tanımlanmış olan WM_USER değerinden 0x7FFF'e kadar olan
mesajlar kullanılmalıdır. WM_USER sistem tarafından işlenen bir mesaj değildir.
Yalnızca programcının kullanabileceği mesaj numarasının nereden başlayacağını
anlatan bir sembolik sabittir.
Alt Pencere Biçimleri
CreateWindow fonksiyonunun
ikinci parametresi olan pencere biçimi eğer alt pencere söz konusuysa en
azından WS_CHILD içermelidir. Ancak WS_BORDER eklenmezse pencerenin sınır
çizgisi görünmez. Genellikle alt pencereler için başlık kullanılmaz. Ancak
WS_CAPTION pencere biçimi eklenirse pencere başlık kısmına sahip olabilir.
WS_VISIBLE Pencere Biçimi
İster üst
pencere ister alt pencere söz konusu olsun eğer pencere biçimi olarak
WS_VISIBLE seçilirse pencere yaratılır yaratılmaz pencere görüntülenir. Eğer
WS_VISIBLE kullanılmazsa görüntüleme işlemi için ShowWindow fonksiyonunun
çağırılması gerekir.
GetClientRect API Fonksiyonu
Bir pencereyle ilgili
işlem yapılırken örneğin alt pencere koordinatlarının belirlenmesi ya da
çizimler söz konusu olduğunda orijin noktası çalışma alanının(client area) sol
üst köşesidir. Pencere boyutunun değiştirilmesi durumunda çalışma alanının sağ
alt köşegeninin koordinatları da değişir. GetClientRect fonksiyonu çalışma
alanının sağ alt köşegeninin koordinatlarını elde etmekte kullanılır. Bu
koordinatın elde edilmesiyle pencerenin genişlik ve yükseklik bilgisi elde
edilmiş olur. Prototipi:
BOOL GetClientRect(
HWND hWnd,
LPRECT lpRect
);
Kullanımı:
LPRECT rect;
GetClientRect(hWnd,
&rect);
Fonksiyonun ikinci parametresi RECT türünden bir yapı değişkeninin adresini
alır. RECT yapısı windows.h içerisinde şöyle bildirilmiştir:
typedef struct
tagRECT{
long left, top, right, bottom;
} RECT *LPRECT;
GetClientRect fonksiyonu ile elde edilen dikdörtgensel koordinatın sol üst
köşegeni her zaman 0, 0 olur. Zaten bu fonksiyon sağ alt köşegenin elde
edilmesi için kullanılır.
WM_SIZE Mesajı
Windows bir pencerenin
boyutunun değiştirildiği bir durumda mesaj kuyruğuna bu mesajı bırakır. Pencerenin
boyutu köşe noktalarından mouse ile çekildiğinde ya da maximize, minimize,
restore tuşlarına basıldığında değişmektedir. Mesajın wParam ve lParam
parametreleri şöyle yerleştirilir:
Width =
LOWORD(lParam); /*rect.right*/
Hight =
HIWORD(lparam); /*rect.bottom*/
wParam
parametresi şu değerleri alabilir:
SIZE_MINIMIZED
SIZE_MAXIMIZED
SIZE_RESTORED
MoveWindow API Fonksiyonu
CreateWindow fonksiyonu
ile belirlenen koordinat pencerenin ilk açılma görüntüsüne ilişkindir. Bunun
dışında pencerenin boyutu çeşitli biçimlerde değiştirilebilir. MoveWindow
fonksiyonu hem pencerenin boyutunu değiştirmekte hem de onu ötelemekte
kullanılabilir. Prototipi:
BOOL MoveWindow(
HWND hWnd,
int x,
int y,
int nWidth,
int nHeight,
BOOL bRepaint
);
Fonksiyonun
birinci parametresi ilgili pencerenin handle değeri, x, y, nWidth ve nHeight
parametreleri pencerenin yeni konumunun bilgileridir. Fonksiyonun son
parametresi taşınan pencerenin görüntüsünün güncellenmesiyle ilgilidir. Bu
parametre genellikle TRUE olarak verilir. Bu durumda güncelleme işlemi hemen
yapılır.
Kontroller
Windows sistemi tarafından
tanımlanmış olan bir grup alt pencere sistemine kontrol denir. Kontroller;
temel kontroller ve gelişmiş kontroller biçiminde ikiye ayrılır. Temel
kontroller şunlardır:
Static kontrolü
Push button kontrolü
Edit box kontrolü
List box kontrolü
Check box kontrolü
Radio button kontrolü
Combo box kontrolü
Scroll bar kontrolü
Gelişmiş kontroller şunlardır:
Toolbar kontrolü
Tree kontrolü
Status bar kontolrü
Proggress bar kontrolü
Column kontrolü
Property sheet kontrolü
Tab kontrolü
...
Windows sistemi yüklenirken bir grup WNDCLASS yapısını çeşitli isimlerle
sisteme register eder. Bu sınıf isimleri alt pencere yaratmakta kullanılırsa
pencere fonksiyonu sınıf ile belirtilen fonksiyonlar olur. Bu sınıfların
pencere fonksiyonları user32.dll içerisindedir ve programcıdan gizlenmiştir. Bu
sınıflar kullanılarak alt pencere yaratıldığında bu pencere için gönderilen
mesajlar programcının değil bu sınıfların pencere fonksiyonu tarafından
işlenir. Örneğin kontrol sınıflarına ilişkin bir pencere yaratılıp mouse ile
üzerine click yapılsa mouse mesajı programın mesaj kuyruğuna bırakılacak ancak
DispatchMessage kotrolün pencere fonksiyonunu çağıracaktır.
Static Kontrolü
Bu kontrol yalnızca bir
alt pencerenin üzerine yazı görüntülemek için kullanılır. Static kontrol
penceresinin zemin ve yazı renkleri ileride ele alınacaktır. Static kontrol
penceresinin zemin rengiyle üst pencerenin zemin rengi aynı alınırsa bu kontrol
bir pencereye yazı yazmak amacıyla kullanılır. Bu kontrolü yaratmak için
CreateWindow fonksiyonunda sınıf ismi yerine "static" girilir.
Pencere kordinatları yazının yazılacağı pencerenin koordinatlarıdır. Pencerenin
içerisine yazılacak yazı CreateWindow fonksiyonunun pencere başlığı yazısıdır.
(WM_SIZE mesajı bir pencere ilk kez görüntülendiği zaman da
gönderilmektedir.)
Static Kontrolünün Özel Pencere Biçimleri
Her pencere için ortak
olan pencere biçimlerinin yanı sıra her kontrolün ayrı yalnızca o kontrol için
anlamlı olan özel pencere biçimleri de vardır. Static kontrolü için en
önemlileri şunlardır:
|
SS_LEFT
|
|
|
SS_RIGHT
|
|
|
SS_CENTER
|
/*Bunlar yazının hizalanmasına ilişkindir.*/
|
|
SS_WHITERECT
|
|
|
SS_BLACKRECT
|
|
|
SS_GRAYRECT
|
/*Bunlar static kontrolünün zemin rengine ilişkindir.*/
Ancak bu renkler mutlak değil göreli renklerdir. Denetim masasındaki
renklendirmeye bağlı olarak değişirler.
|
|
SS_WHITEFRAME
|
|
|
SS_BLACKFRAME
|
|
|
SS_GRAYFRAME
|
/*Kontrolün sınır çizgilerinin rengine ilişkindir.*/
|
Not: Bir pencerenin double-click mesajlarını kabul edebilmesi için sınıfın
yaratıldığı WNDCLASS yapısının UINT Style elemanını CS_DBLCLKS olarak belirtmek
gerekir.

0 yorum: