wm user mesajları

2 Temmuz 2013 Salı Unknown 0 yorum

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: