Görüntü Modu(Mapping mode)
işletim |
DC nesnesinin çizime
ilişkin en önemli elemanı görüntü modudur. Default görüntü modeu MM_TEXT'tir.
Aslında çizim yapılırken kullanılan x, y değerleri pixellere karşılık gelmek
zorunda değildir. Bu koordinata mantıksal koordinat denir. GDI fonksiyonları bu
mantıksal koordinatları gerçek pixel koordinatlarına dönüştürerek çizim
yaparlar. Görüntü modu şunlar üzerinde etkili olmaktadır:
1. Mantıksal koordinatların pixel koordinatlarına dönüştürülme biçiminde
etkili olur.
2. x ve y artımlarının hangi yöne doğru olacağı üzerinde etkili olur.
3. Orijin üzerinde de etkisi vardır.
MM_TEXT Modu
Bir DC elde edildiğinde bu
default moddur. Mantıksal koordinatlarla pixel koordinatları birebir örten
biçimindedir. Yani (10, 10) noktası çalışma alanının sol üst köşesinden
itibaren 10 pixel sağ ve 10 pixel aşağıda bulunan pixel'dir. Bu mod doğrudan
pixel tabanlı olduğu için çözünürlüğün değiştirilmesinden çok fazla etkilenir.
x, y arttırımı x sağa y aşağıya doğru yapılmaktadır.
MM_LOENGLISH ve MM_HIENGLISH Modları
Bu iki mod da x
arttırımları sağa doğru y arttırımları yukarı doğrudur. MM_LOENGLISH modunda
mantıksal bir birim 0.01 inch'e, MM_HIENGLISH'te ise her bir birim 0.001 inch'e
karşılık gelmektedir. Örneğin MM_HIENGLISH modunda (0,0)'dan (1000, 1000)'e bir
doğru çizildiğinde (0,0)'dan 1 inch sağa 1 inch yukarı olacak şekilde bir doğru
çizilmektedir. Tabii GDI sistemi gerçek bir inch hesabı yapamaz. Çünkü çizginin
kaç inch olacağı çözünürlüğe ve ekranın büyüklüğüne bağlıdır(Bir çizimin kaç inch
oduğunun belirlenebilmesi için kullanılan monitörün büyüklüğünün ve çalışılan
çözünürlüğün bilinmesi gerekir. Çünkü bunlar bilinirse bir pixel'in genişliği
ve yüksekliği bulunabilir. Buradan hareketle tam bir ölçü hesaplanabilir).
Ancak Windows sisteminin monitör uzunluğunu otomatik olarak bilmesi tam olarak
mümkün değildir. Bu yüzden buradaki inch gerçek bir inch büyüklüğünü ifade
edemez. Aslında Control Panel içerisinde sistem fontunun ayarlarıyla oynanarak
dolaylı bir biçimde monitör uzunluğu girilebilir.
MM_LOMETRIC ve MM_HIMETRIC Modları
Bu iki modda mantıksal
birim milimetre cinsinden belirlenmiştir. Arttırım x için sağa, y için yukarıya
doğrudur. Bir mantıksal birim MM_LOMETRIC'te 0.1 milimettre, MM_HIMETRIC'te ise
0.01 milimetredir.
Kartezyen Koordinat Sisteminde Doğru Çizen Program
Pencerenin herhangi bir
bölgesine birbirini kesen iki doğru çizilebilir. Bunların kesişim noktsı view
port origin olarak belirlenebilir. Görüntü modu için MM_TEXT uygun değildir.
MM_LOMETRIC kullanılmıştır. Program bir doğru çizmektedir. menüden seçim
yapıldığında bir dialog penceresi çıkar. (x1, y1) ve (x2, y2) noktalarını ister
ve doğru MoveToEx ve LineTo fonksiyonlarıyla çizilir. Programın menü yapısı:
File=>Exit, Graph=>Line. Görüntü modunu değiştirmek için SetMapMode
fonksiyonu kullanılır. Prototipi:
Scroll Bar'ların Kontrolü
Scroll bar'lar yatay ve
düşey olmak üzere iki kısıma ayrılmaktadır. Bir scroll bar ya otomatik olarak
pencerenin sağ ve alt köşelerine yerleştirilir ya da bir alt pencere gibi
yaratılır. Pencerenin sağına ve altına otomatik yerleştirilen scroll bar'lar
birer alt pencere değildir. Scroll bar üzerinde şu hareketler yapılabilir:
1. Scroll bar oklarına tek click yapılabilir.
2. Scroll bar düğmesinin herhangi iki tarafına tek click yapılabilir.
3. Scroll bar düğmesi üzerinde sürükle ve bırak hareketi yapılır.
Scroll bar kontrolü bir
alt pencere olarak "scrollbar" sınıfıyla yaratılabilir. Scroll bar
üzerinde yukarıda tanılanan işlemlerden birisi tanımlandığında scroll bar üst
pencereye mesaj gönderir(Kontrol olarak yaratılmışsa üst pencereye, pencereye
gömülü olarak yaratılmışsa gömülü olarak yaratılmış olan pencereye mesaj
gönderir).
Scroll bar üzerinde işlem
yapıldığında scroll bar düğmesi otomatik olarak ilerletilmez. Programcı
SetScrollPos API fonksiyonuyla düğmeyi ilerletir. Scroll bar üzerinde işlem
uygulandığında üst pencere diğer kontrollerde olduğu gibi WM_COMMAND mesajıyla
çağırılmaz, WM_HSCROLL ve WM_VSCROLL mesajlarıyla çağırılır.
WM_HSCROLL ve WM_VSCROLL Mesajları
Mesajın parametreleri
şunlardır: Eğer mesaj alt pencere biçimindeki bir scroll bar'dan gönderilmişse
lParam içerisinde alt pencerenin handle değeri bulunur. Pencere içerisine
otomatik iliştirilmiş olan scroll bar'lardan gönderilmişse lParam içerisinde 0
bulunur. LOWORD(wParam) scroll bar üzerinde hangi işlemin uygulandığını anlatır
ve şunlardan bir tanesi olabilir:
SB_LINEUP Scroll bar yukarı(sol) ok
tuşuna basma sonucu
SB_LINEDOWN Scroll bar aşağı(sağ)
ok tuşuna basma sonucu
SB_PAGEUP Scroll bar düğmesinin
yukarısına(soluna) basma sonucu
SB_PAGEDOWN Scroll bar düğmesinin
aşağısına(sağına) basma sonucu
SM_THUMBPOSITION Scroll bar
düğmesi sürüklenip bırakıldıktan sonra
SB_THUMBTRACK Scroll bar
düğmesi sürüklenirken
SB_TOP Klavye kullanımı için
ayrılmıştır
SB_BOTTOM Klavye kullanımı
için ayrılmıştır
SM_TOP ve SB_BOTTOM yalnızca klavye kullanımı için düşünülmüştür. Eğer
scroll bar alt pencere biçiminde yaratıldıysa girdi odağı scroll bar üzerine
verildiğinde kalvyenin tuşları otomatik olarak şu mesajları gönderir:
0 yorum: