Bu yazımızda, Scroll
bar, Kaydırma çubuğu isimleriyle bilinen akıtma çubuğu standart kontrolünü
inceleyeceğiz. Win32 sistemlerinde yazılmış bir grafik uygulaması, uygulamanın
ana penceresinin boyutlarından daha büyük boyutlarda olan bir belgeyi ya da
resmi gösterebilir. Ancak bu işlemin gerçekleştirilebilmesi için görüntülemenin
yapılacağı forma, kullanıcının fare ile müdahale edebileceği akıtma çubukları
konulmalıdır. Kullanıcı forma sığmayan nesnenin görünmeyen kısımlarını görebilmek
için, formun ya da söz konusu kontrolün kenarlarında oluşturulan akıtma çubuklarını
sağa sola ya da yukarıya aşağıya doğru hareket ettirebilir.
Kullanıcıya sunulacak
nesnenin, uygulamanın ana ekranına sığmadığı her durumda programcı akıtma çubukları
kullanır. Akıtma çubukları dikey ya da yatay konumlarda bulunabilir. Programcı
uygulamada oluşan durumu dikkate alarak akıtma çubuğunun yönünü, kontrolü yaratırken
belirler. Sağa sola doğru yapılacak kaydırmalar için yatay bir akıtma çubuğu,
yukarıya aşağıya doğru yapılacak kaydırmalar için ise dikey bir akıtma çubuğu
kullanılır.
AKITMA
ÇUBUĞU KONTROLÜNÜN BİLEŞENLERİ
Akıtma çubuğu kontrolü,
her iki ucunda üzerinde ok simgesi bulunan birer düğmeden, düğmeler arasında
kalan bir akıtma kutusundan ve kaydırılma miktarını belirten bir düğmeden oluşur.
Akıtma çubuğu, uygulamanın bir penceresinde gösterilmek istenen bir nesnenin
tüm genişliğini veya yüksekliğini belirtir; akıtma kutusu ise bu nesnenin pencere
içerisinde görüntülenebilen yani pencereye sığabilen görünür kısmını belirtir.
Akıtma kutusunun konumu, kullanıcı nesnenin farklı kısımlarını görüntüleyebilmek
amacıyla kaydırma yaptığında değiştirilir. Aşağıda
bir akıtma çubuğu kontrolünün kısımları gösterilmiştir :
Kontrolün başında
ve sonunda bulunan kaydırma düğmeleri pencere üzerinde tam olarak görüntülenememiş
nesnenin akıtılması için kullanılır. Ayrıca akıtma kutusu içerisinde herhangi
bir yere fare ile basılması sırasında da akıtma yapılabilir. Kaydırma düğmeleri,
içeriğin ilgili yöne doğru bir birim kaydırılmasını sağlar. Bir birimden daha
fazla kaydırılma yapılabilmesi için akıtma kutusu kullanılır. Kaydırma kutusu
düğmesinin sürüklenmesi ile de kaydırma yapılabilir. Bu durumda gerçekleşecek
kaydıra miktarı da düğmenin basılıp sürüklenmesi miktarına bağlıdır.
Akıtma çubuğu,
bir pencere içerisinde standart akıtma çubuğu olarak ya da akıtma çubuğu
kontrolü olarak bulunabilir. Standart akıtma çubuğu, pencerenin kullanım alanı
dışarısında bulunur. Pencere ile birlikte oluşturulur ve pencere gösterildiği
zaman görünür hale gelir. Standart akıtma çubuğu, kullanıcının pencerenin kullanım
alanının tamamını görebilmesi için akıtma gerçekleştirir. Standart akıtma çubuğunu
oluşturabilmek için, ilgili pencere oluşturulurken WS_HSCROLL (yatay akıtma
çubuğu) veya WS_VSCROLL (dikey akıtma çubuğu) pencere biçimleri belirtilir.
Akıtma çubuğu kontrolü ise scrollbar pencere sınıf ismi kullanılarak oluşturulan
bir kontrol penceresidir. Bu kontrolün görünümü ve işlevi, standart akıtma çubuğunda
olduğu gibidir; ancak ayrı bir penceredir (kontroldür). Aşağıda bu akıtma çubukları
gösterilmiştir :
Standart akıtma
çubukları kullanmanın avantajı, Windows sisteminin bir akıtma çubuğu oluşturması
ve bu çubuğun boyutlarını ve konumunu otomatik olarak ayarlamasıdır. Ancak bazı
durumlarda, standart akıtma çubukları işimizi görmeyebilir. Örneğin, ana pencereyi
belli bölümlere ayırıp, her bölümde o bölüme özgü birer standart akıtma çubuğu
oluşturmak isteyebiliriz. Bu isteğimizi standart akıtma çubukları ile gerçekleştiremeyiz.
Çünkü standart akıtma çubukları, bir pencere için sadece bir tane olabilir.
Böyle durumlarda, akıtma çubuğu kontrollerini kullanabiliriz. Akıtma çubuklarının
tek kullanım nedeni, görüntülenemeyen kısımların görünür hale gelmesini sağlamak
değildir. Uygulama içerisinde belli bir ayar gerektiren (ses ayarı, hız ayarı
gibi) durumlarda akıtma çubukları kullanılabilir.
AKITMA
ÇUBUĞU KONTROLÜNÜN PENCERE BİÇİMLERİ
Akıtma çubuklarına
ilişkin pencere biçimlerinin bazıları, kontrolün varsayılan genişlik veya yükseklikte
oluşturulmasını sağlar. Ancak her durumda, kontolün görüntülenmesini istediğimiz
koordinatları belirtmemiz gereklidir. Şimdi akıtma çubuklarına ilişkin pencere
biçimlerine ve anlamlarına bir göz atalım :
AKITMA
ÇUBUĞU KONTROLÜ PENCERE BİÇİMİ SEMBOLİK SABİT İSMİ
|
ANLAMI
|
SBS_BOTTOMALIGN |
Kontrolün
alt kenarını, kontrol oluşturulurken belirtilen x, y koordinat değerleri
ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği dikdörtgenin
alt kenarı ile hizalar. |
SBS_HORZ |
Yatay
bir kaydırma çubuğu belirtir. Eğer SBS_BOTTOMALIGN ve SBS_TOPALIGN pencere
biçimleri kullanılmamışsa, kaydırma çubuğu, kontrol oluşturulurken belirtilen
x, y konumunda ve nWidth, nHeight genişlik yükseklik değerlerine sahip olur.
|
SBS_LEFTALIGN |
Kontrolün
sol kenarını, kontrol oluşturulurken belirtilen x, y koordinat değerleri
ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği dikdörtgenin
sol kenarı ile hizalar. Kontrolün genişliği sistem akıtma çubuğunun varsayılan
genişlik değeri kadar olur. Bu pencere biçimi, SBS_VERT pencere biçimi ile
birlikte kullanılmalıdır. |
SBS_RIGHTALIGN |
Kontrolün
sağ kenarını, kontrol oluşturulurken belirtilen x, y koordinat değerleri
ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği dikdörtgenin
sağ kenarı ile hizalar. Kontrolün genişliği sistem akıtma çubuğunun varsayılan
genişlik değeri kadar olur. Bu pencere biçimi, SBS_VERT pencere biçimi ile
birlikte kullanılmalıdır. |
SBS_SIZEBOX |
Büyüklük
kutusu belirtir. Bu kutu, SBS_SIZEBOXBOTTOMRIGHTALIGN ve SBS_SIZEBOXTOPLEFTALIGN
pencere biçimleri kullanılmamışsa, kontrol oluşturulurken belirtilen konumda
ve boyutlarda olur. |
SBS_SIZEBOXBOTTOMRIGHTALIGN |
Büyüklük
kutusunun sağ alt köşesini, kontrol oluşturulurken belirtilen x, y koordinat
değerleri ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği
dikdörtgenin sağ alt köşesi ile hizalar. Büyüklük kutusunun genişliği ve
yüksekliği sistem büyüklük kutusunun varsayılan boyutları değerinde olur.
Bu pencere biçimi, SBS_SIZEBOX pencere biçimi ile birlikte kullanılmalıdır.
|
SBS_SIZEBOXTOPLEFTALIGN |
Büyüklük
kutusunun sol üst köşesini, kontrol oluşturulurken belirtilen x, y koordinat
değerleri ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği
dikdörtgenin sol üst köşesi ile hizalar. Büyüklük kutusunun genişliği ve
yüksekliği sistem büyüklük kutusunun varsayılan boyutları değerinde olur.
Bu pencere biçimi, SBS_SIZEBOX pencere biçimi ile birlikte kullanılmalıdır.
|
SBS_SIZEGRIP |
SBS_SIZEBOX
pencere biçimi ile aynı işlevi görmektedir. Ancak SBS_SIZEBOX biçimine ek
olarak, belirgin bir kenarlık eklenmesini sağlar. |
SBS_TOPALIGN |
Kontrolün
üst kenarını, kontrol oluşturulurken belirtilen x, y koordinat değerleri
ve nWidth, nHeight genişlik yükseklik değerlerinin belirlediği dikdörtgenin
üst kenarı ile hizalar. Kontrolün yüksekliği sistem akıtma çubuğunun varsayılan
yükseklik değeri kadar olur. Bu pencere biçimi, SBS_HORZ pencere biçimi
ile birlikte kullanılmalıdır. |
CBS_VERT |
Dikey
bir kaydırma çubuğu belirtir. Eğer SBS_RIGHTALIGN ve SBS_LEFTALIGN pencere
biçimleri kullanılmamışsa, kaydırma çubuğu, kontrol oluşturulurken belirtilen
x, y konumunda ve nWidth, nHeight genişlik yükseklik değerlerine sahip olur.
|
AKITMA
KUTUSUNUN KONUMU VE AKITMA MİKTARI
Akıtma kutusunun
konumu tamsayı bir değer ile belirtilir. Bu değer, akıtma çubuğunun yatay veya
dikey olmasına göre, sol veya üst bitiş noktası baz alınarak verilir. Konum
değeri, akıtma miktarının en fazla ve en az değerleri arasında bir değer olmalıdır.
Örneğin 0 ile 100 arasında akıtma yapılabilen bir kontrol için, 50 konum değeri,
kontrolün tam orta noktasını belirtir. Başlangıç miktarı da akıtma çubuğuna
bağlıdır. Standart akıtma çubukları 0 ile 100 arasında değişen başlangıç miktarı
değerine sahip olabilirken, akıtma çubuğu kontrolü, kontrol oluşturulurken bir
değer belirtilmediği sürece en az ve en fazla değerleri 0 olacak biçimde yaratılırlar.
Akıtma çubuğunun konumu, SetScrollInfo API fonksiyonu ile verilebilir ve GetScrollInfo
API fonksiyonu ile öğrenilebilir. (Eski sistemlerde bu API fonksiyonları yerine
SetScrollRange ve GetScrollRange API fonksiyonları kullanılır.)
Uygulama içerisinde
akıtma miktarı, kaydırılacak nesnenin konumuna kolayca dönüştürülecek bir tamsayıya
getirilir. Örneğin bir yazı dosyasının 260 satırı, aynı anda sadece 16 satır
gösterebilen bir pencere içerisinde gösterilmek isteniyorsa, dikey akıtma çubuğunun
miktarı 1 ile 244 arasında olacak şekilde ayarlanır. Akıtma kutusu 1 konumunda
olduğunda, yazı dosyasının ilk satırı pencerenin en üst kısmında görüntülenir.
Akıtma kutusu 244 konumunda olduğunda, yazı dosyasının son satırı pencerenin
en alt kısmında görüntülenir. Eğer en küçük değerden daha küçük veya en büyük
değerden daha büyük bir konuma ulaşılmaya çalışılırsa, bu değerler yerine, akıtma
miktarının en küçük ve en büyük değerleri kullanılır.
Günümüzde kullanılan
Windows sistemlerinde (NT 4.0 ve sonrası Windows sistemleri), uygulama içerisinde
yer alan bir akıtma çubuğu için sayfa büyüklüğünün ayarlanması da mümkündür.
Sayfa büyüklüğü, geçerli boyutları verilen pencerenin kullanım alanında görüntülenebilecek
veri birimi (data unit) sayısını ifade eder. Örneğin, pencerenin kullanım alanı
bir yazının 16 satırını gösterebiliyorsa, uygulama içerisinde sayfa büyüklüğü
16ya ayarlanabilir. Windows sistemleri, verilen bu sayfa büyüklüğü miktarını,
akıtma kutusunun büyüklüğünü ayarlamak için kullanır. Akıtma çubuğuna sahip
olan bir pencere yeniden boyutlandırıldığında, sayfa büyüklüğü değerinin ayarlanması
için SetScrollInfı API fonksiyonunun çağrılması gereklidir. Geçerli olan sayfa
büyüklüğü değerini öğrenebilmek için ise GetScrollInfo API fonksiyonu kullanılır.
Akıtma çubuğu miktarı ile akıtılacak olan nesne arasında düzgün bir ilişki kurulabilmesi
için, uygulama içerisinde nesnede her değişiklik olduğu durumda akıtma miktarı
da bu değişikliğe uygun olacak şekilde ayarlanmalıdır.
Akıtma çubuğunun
akıtma kutusu düğmesi kullanıcı tarafından hareket ettirilirken, akıtma çubuğu,
akıtma kutusunun akıtma miktarındaki içerisindeki konumunu tamsayı bir değer
ile ifade ederek bildirir. Eğer getirilen konum, en küçük değere karşılık geliyorsa
akıtma kutusu düğmesi, dikey bir akıtma çubuğu için çubuğun en üst kısmında;
yatay bir akıtma çubuğu için ise çubuğun en sol kısmında yer alacaktır. Eğer
getirilen konum, en büyük değere karşılık geliyorsa akıtma kutusu düğmesi, dikey
bir akıtma çubuğu için çubuğun en alt kısmında; yatay bir akıtma çubuğu için
ise çubuğun en sağ kısmında yer alacaktır. Günümüzde kullanılan Windows sistemlerinde,
akıtma çubuğunun bildireceği en büyük akıtma miktarı değeri, sayfa büyüklüğü
değerine bağlıdır. Eğer bir akıtma çubuğu, 1den büyük bir sayfa büyüklüğü değerine
sahipse en fazla akıtma konumu, en büyük akıtma miktarı değerinden daha küçük
olacaktır. En büyük akıtma konumu şu formülle hesaplanabilir :
Akıtma kutusunun,
akıtma çubuğu içerisindeki konumu uygulama tarafından belirtilmeli ve ayarlanmalıdır.
Kullanıcı akıtma çubuğunda kaydırma işlemi yaparken, akıtma çubuğu, akıtma kutusu
düğmesinin konumunu otomatik olarak ayarlamaz. Bunun yerine ana pencereye akıtma
gerçekleştirildiğine ilişkin bir bilgi mesajı iletir. Akıtma kutusunun konumunun
ayarlanması iiçin NT 4.0 ve sonrasına dahil olan sistemlerde SetScrollInfo API
fonksiyonu, daha eski sistemlerde ise SetScrollPos API fonksiyonu kullanılır.
AKITMA
ÇUBUĞU KONTROLÜNÜN GÖRÜNÜRLÜĞÜ
Windows sistemleri,
standart akıtma çubuğu için en küçük ve en büyük değerler birbirine eşit olacak
şekilde ayarlandığında, çubuğu gizler. NT 4.0 ve sonraki sistemlerde, akıtma
çubuğunun tüm akıtma miktarına eşit olan sayfa büyüklüğü değeri verildiğinde,
standart akıtma çubuğu sistem tarafından gizlenir. Böylece kullanılması gerekli
olmadığı durumlarda, çubuk görüntülenmez. En küçük ve en büyük akıtma miktarı
değerlerinin eşitliği bozulduğunda veya NT 4.0 ve sonraki sistemlerde sayfa
büyüklüğü değeri tüm akıtma miktarını kapsamadığında, standart akıtma çubuğu
yeniden görünür hale getirilir. Bir akıtma çubuğunun görünürlüğünü değiştirmek
için ise ShowScrollBar API fonksiyonu kullanılır. Bu API fonksiyonu, kontrolün
akıtma miktarı değerini, sayfa büyüklüğü değerini ve akıtma kutusu düğmesinin
konumunu değiştirmez. Akıtma çubuğunun akıtma kutusu düğmelerinin pasif (disabled)
duruma getirmek için EnableScrollBar API fonksiyonu kullanılır. Pasif hale getirilen
akıtma kutusu düğmeleri, kullanıcı girişine kapatılır.
AKITMA
ÇUBUĞU ÇAĞRILARI
Kullanıcılar, akıtma
çubuğunun birkaç kısmına fare ile tıklamak yoluyla akıtma çağrısında bulunabilir.
Windows sistemleri bu çağrıları, WM_HSCROLL veya WM_VSCROLL mesajları ile ana
pencerelere iletir. Yatay bir akıtma çubuğu WM_HSCROLL mesajı, dikey bir akıtma
çubuğu ise WM_VSCROLL mesajı iletir. Gönderilen bilgi mesajları, akıtma çubuğu
üzerinde yapılan işleme ilişkin bilgi de içerir. Bazı durumlarda, akıtma kutusu
düğmesinin konum bilgisini de içerirler. Aşağıda kullanıcının kontrol üzerinde
tıklama yaptığı kısma göre iletilen bilgi mesajları gösterilmiştir :
Şekilden de anlaşılacağı
üzere, kullanıcınınn kontrol üzerinde yaptığı işleme göre, her durumda farklı
bir bilgi mesajı ile akıtma çağrısında bulunulmaktadır. Uygulama içerisinde
WM_HSCROLL ve WM_VSCROLL mesajları ile birlikte gelen bu mesajlar dinlenerek,
akıtma işlemine uygun bir işlem gerçekleştirilir. Aşağıdaki tabloda bu bilgi
mesajları listelenmiş ve bilgi mesajlarının kullanıcının hangi işlemi sonucunda
gönderildiği bilgisi verilmiştir. Mesajlara verilecek yanıtlarda kullanılan
birim, kaydırılan nesne ile uygun olacak şekilde uygulama tarafından belirlenen
bir birimdir. Örneğin bir yazıyı dikey bir şekilde kaydırırken kullanılacak
birim, yazının bir satırı olabilir.
AKITMA
ÇUBUĞU KONTROLÜ BİLGİ MESAJI
|
KULLANICININ
EYLEMİ
|
UYGULAMANIN
VERECEĞİ YANIT |
SB_LINEUP |
Kullanıcı üst akıtma kutusu düğmesine tıklamış. |
Akıtma
kutusu konumunu azalt, nesnenin üst kısmına doğru bir birim akıtma gerçekleştir. |
SB_LINEDOWN |
Kullanıcı
alt akıtma kutusu düğmesine tıklamış. |
Akıtma
kutusu konumunu artır, nesnenin alt kısmına doğru bir birim akıtma gerçekleştir. |
SB_LINELEFT |
Kullanıcı
sol akıtma kutusu düğmesine tıklamış. |
Akıtma
kutusu konumunu azalt, nesnenin sol kısmına doğru bir birim akıtma gerçekleştir. |
SB_LINERIGHT |
Kullanıcı
sağ akıtma kutusu düğmesine tıklamış. |
Akıtma
kutusu konumunu artır, nesnenin sağ kısmına doğru bir birim akıtma gerçekleştir. |
SB_PAGEUP |
Kullanıcı
akıtma konumu düğmesinin üst kısmında akıtma miktarı bölgesine tıklamış. |
Akıtma
kutusu konumunu bir pencerede görüntülenebilen veri birimi kadar azalt,
nesnenin üst kısmına doğru aynı miktarda akıtma gerçekleştir. |
SB_PAGEDOWN |
Kullanıcı
akıtma konumu düğmesinin alt kısmında akıtma miktarı bölgesine tıklamış. |
Akıtma
kutusu konumunu bir pencerede görüntülenebilen veri birimi kadar artır,
nesnenin alt kısmına doğru aynı miktarda akıtma gerçekleştir. |
SB_PAGELEFT |
Kullanıcı
akıtma konumu düğmesinin sol kısmında akıtma miktarı bölgesine tıklamış. |
Akıtma
kutusu konumunu bir pencerede görüntülenebilen veri birimi kadar azalt,
nesnenin sol kısmına doğru aynı miktarda akıtma gerçekleştir. |
SB_PAGERIGHT |
Kullanıcı
akıtma konumu düğmesinin sağ kısmında akıtma miktarı bölgesine tıklamış. |
Akıtma
kutusu konumunu bir pencerede görüntülenebilen veri birimi kadar artır,
nesnenin sağ kısmına doğru aynı miktarda akıtma gerçekleştir. |
SB_THUMBPOSITION |
Kullanıcı
akıtma konumu düğmesini sürüklemiş ve bırakmış. |
Akıtma
konumu düğmesini mesaj ile verilen konuma ayarla, aktılan nesneyi aynı miktarda
kaydır. |
SB_THUMBTRACK |
Kullanıcı
akıtma konumu düğmesini sürüklemekte. |
Akıtma
konumu düğmesini mesaj ile verilen konuma ayarla, aktılan nesneyi aynı miktarda
kaydır. |
BS_ENDSCROLL |
Kullanıcı
akıtma kutusu düğmelerine tıklamış veya akıtma miktarı bölgesine tıklamış,
ardından fareyi serbest bırakmış . |
- |
Akıtma çubuğu üzerine
tıklandığında veya sürükleme işlemi yapıldığında, kontrol SB_THUMPOSITION ve
SB_THUMBTRACK bilgi mesajlarını iletir. Bu iki mesajdan birisi işlenerek bu
durum ele alınabilir. SB_THUMPOSITION bilgi mesajı, kullanıcı akıtma kutusu
düğmesine fare ile tıkladıktan sonra fareyi serbest bıraktığı sırasında oluşur.
SB_THUMBTRACK bilgi mesajı ise akıtma kutusu düğmesi sürüklenirken iletilir.
Uygulamada, kullanıcı akıtma kutusu düğmesini sürükleyip fareyi serbest bıraktıktan
sonra akıtma işleminin gerçekleştirilmesi için SB_THUMBPOSITION mesajı işlenmelidir.
Kullanıcı akıtma kutusu düğmesini sürüklerken pencere içeriğinin akıtılması
için SB_THUMBTRACK mesajı işlenmelidir.
Basit bir uygulama
geliştirerek ekranda akıtma çubuğu üzerinde tıkladığımız yere göre hangi mesajların
iletildiği bilgisini izleyebiliriz. Bu amaçla standart akıtma çubuklarına sahip
bir pencere oluşturup, pencere fonksiyonu içerisinde akıtma çubuğundan gelen
mesajları dinleyelim ve gelen mesaja ilişkin bilgiyi ekran üzerinde bir etiket
kontrolüne yazdıralım.
hWnd = CreateWindow("gui",
                              
"Kaydırma Çubuğu Kontrolü Uygulaması",
                              
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
                               CW_USEDEFAULT,
                              
0,
                              
500,
                              
150,
                              
NULL,
                              
NULL,
                              
hInstance,
                              
NULL);
|
Ana penceremizi
oluştururken, pencere biçimi parametresi olarak WS_HSCROLL ve WS_VSCROLL sembolik
sabitleri geçildiğinde, penceremiz için yatay ve dikey standart akıtma çubukları
oluşturulur. Penceremizi bu parametre değişkeni değerleri ile oluşturduktan
sonra, pencere fonksiyonumuzda akıtma çubuğundan gelen mesajları ele alarak,
ekran üzerinde statik bir kontrole mesajları yazdıralım :
case WM_VSCROLL:
      switch (LOWORD(wParam))
      {
            case SB_PAGEUP :
                 
SetWindowText(hTempControl,"Dikey kaydırma -> PAGEUP");
                 
break;
     
      case SB_PAGEDOWN :
                 
SetWindowText(hTempControl,"Dikey kaydırma -> PAGEDOWN");
                 
break;
     
      case SB_LINEUP :
                 
SetWindowText(hTempControl,"Dikey kaydırma -> LINEUP");
                 
break;
     
      case SB_LINEDOWN :
                 
SetWindowText(hTempControl,"Dikey kaydırma -> LINEDOWN");
                 
break;
     
      case SB_THUMBTRACK:
                 
SetWindowText(hTempControl,"Dikey kaydırma -> THUMBTRACK");
                 
break;
     
}
      break;
case WM_HSCROLL
:
      switch (LOWORD(wParam))
      {
            case SB_PAGEUP :
                 
SetWindowText(hTempControl,"Yatay kaydırma -> PAGEUP");
                 
break;
     
      case SB_PAGEDOWN :
                 
SetWindowText(hTempControl,"Yatay kaydırma -> PAGEDOWN");
                 
break;
     
      case SB_LINEUP :
                 
SetWindowText(hTempControl,"Yatay kaydırma -> LINEUP");
                 
break;
     
      case SB_LINEDOWN :
                 
SetWindowText(hTempControl,"Yatay kaydırma -> LINEDOWN");
                 
break;
     
      case SB_THUMBTRACK:
                 
SetWindowText(hTempControl,"Yatay kaydırma -> THUMBTRACK");
                 
break;
     
}
      break;
|
SetWindowText
fonksiyonuna parametre olarak geçilen hTempControl tutamaç değeri, ekran üzerinde
oluşturduğumuz bir statik kontrole ilişkindir. Bu şekilde oluşturacağımız uygulamanın
çalışma zamanında akıtma çubuklarının çeşitli yerlerine tıklayarak pencere fonksiyonuna
hangi mesajların geldiğini izleyebilirsiniz :
AKITMA
ÇUBUĞUNU KLAVYE İLE YÖNETME
Akıtma çubuğu kontrolü,
kullanıcının klavyeden yapabileceği girişlere de yanıt verebilir. (Standart
akıtma çubuğu için bu durum söz konusu değildir.) Pencere üzerinde akıtma çubuğu
kontrolüne odaklanıldığı sırada, klavyedeki ok tuşlarına asılırsa, kontrol ana
penceresine WM_HSCROLL ve WM_VSCROLL bilgi mesajını iletecektir. Bu bilgi mesajları
ile birlikte kullanıcının bastığı tuş bilgisi de gönderilir. Aşağıda bu bilgi
mesajları listelenmiştir :
KLAVYEDEN
BASILAN TUŞ
|
GÖNDERİLEN
BİLGİ MESAJI
|
DOWN |
SB_LINEDOWN veya SB_LINERIGHT |
END |
SB_BOTTOM |
HOME |
SB_TOP |
LEFT |
SB_LINEUP
veya SB_LINELEFT |
PGDN |
SB_PAGEDOWN
veya SB_PAGERIGHT |
PGUP |
SB_PAGEUP
veya SB_PAGELEFT |
RIGHT |
SB_LINEDOWN
veya SB_LINERIGHT |
UP |
SB_LINEUP
veya SB_LINELEFT |
SB_TOP bilgi mesajı,
kullanıcının akıtma miktarı değerinin en üst noktasına ulaştığı durumda gönderilir.
Bu durumda, uygulama kaydırılan nesnenin görünür hale gelmesi için pencere içeriğini
aşağıya doğru akıtır. SB_BOTTOM bilgi mesajı, kullanıcının akıtma miktarı değerinin
en alt noktasına ulaştığı durumda gönderilir. Bu durumda, uygulama kaydırılan
nesnenin görünür hale gelmesi için pencere içeriğini yukarıya doğru akıtır.
Programlarımız içerisinde akıtma çubuğu kontrolünün klavye ile yönetilmesini
istiyorsak, pencere fonksiyonunda öncelikle WM_KEYDOWN mesajını işlemeliyiz.
Daha sonra mesajla birlikte gelen basılan tuş bilgisini inceleyerek uygun akıtma
işlemini gerçekleştirmeliyiz.
KULLANIM
ALANININ AKITILMASI
Kullanım alanının
akıtılmasının en basit yolu, alanı önce silip ardından yeniden çizmektir. Bu
yöntemi uygulama içerisinde SB_PAGEUP, SB_PAGEDOWN ve SB_TOP bilgi mesajlarını
kullanmak yoluyle uygulayabiliriz. Bu bilgi mesajları yeni içeriğin tamamını
talep edecekleri için, silme ve yeniden çizme işlemi yapılmasına neden olurlar.
SB_LINEUP ve SB_LINEDOWN gibi bazı bilgi mesajlarında, tüm içeriğin silinmesine
gerek duyulmaz, çünkü akıtma gerçekleştikten sonra bazı alanların yine görünmesi
gerekli olabilir. ScrollWindowEx API fonksiyonu, kullanım alanının bir kısmının
içeriğini ayırır, ayırdığı bu kısmı belli bir miktar hareket ettirir; daha sonra
geri kalan kısım için yeniden boyanma ihtiyacı bilgisimi gönderir. ScrollWindowEx
APIsi nesnenin belli bir kısmının belli bir miktar hareket ettirilmesi için
BitBlt fonksiyonunu kullanır. Kullanım alanının geri kalan kısmı, WM_PAINT mesajının
işlenmesiyle yeniden çizilerek güncellenir.
ScrollWindowEx
fonksiyonu, kullanım alanının bir kısmının akıtma işlemine dahil edilmemesi
amacıyla kullanılabilir. Bu sayede, alt pencereler gibi sabit pozisyonlu öğelerin
kullanım alanı içerisinde hareket ettirilmesine gerek kalmaz. Bu fonksiyon,
kullanım alanının mesajı alan bölgesinin yeniden ele alınmasını sağlar ve uygulamanın
çakışan bölgeleri tespit etmesine gerek kalmaz.
Uygulamalarda pencere
içeriği genellikle akıtma çubuğunun işaret ettiği yöne ters yönde kaydırılır.
Yani, kullanıcı akıtma çubuğunda düğmenin alt kısmına tıkladığında, penceredeki
elemanlar yukarıya doğru hareket ettirilir ve alt kısımdaki elemanlar görünür
hale getirilir.
AKITMA
ÇUBUĞUNA İLİŞKİN RENKLER VE ÖLÇÜLER
COLOR_SCROLLBAR
isimli sistemde tanımlanmış renk değeri, akıtma çubuğunun renk bilgisi ile ilgili
işlemlerde kullanılır. GetSysColor isimli fonksiyon, çubuğun renginin öğrenilmesi
amacıyla kullanılır. SetSysColor isimli fonksiyon ise çubuğun rengini değiştirmek
amacıyla kullanılır. Bu fonksiyonlar, sistemdeki tüm akıtma çubuklarının renklerine
etki etmektedir.
Windows sisteminin
standart akıtma çubuklarında kullandığı bitmap görüntülere ilişkin bout bilgileri
GetSystemMetrics fonksiyonu ile alınabilir. Aşağıda akıtma çubuğuna ilişkin
sistem ölçü değerleri listelenmiştir :
SİSTEM
ÖLÇÜ SABİTİ
|
ANLAMI
|
SM_CXHSCROLL |
Yatay akıtma çubuğu üzerindeki ok bitmap görüntüsünün genişliği |
SM_CXHTHUMB |
Yatay
akıtma çubuğu üzerindeki akıtma düğmesinin genişliği |
SM_CXVSCROLL |
Dikey
akıtma çubuğu üzerindeki ok bitmap görüntüsünün genişliği |
SM_CYHSCROLL |
Yatay
akıtma çubuğu üzerindeki ok bitmap görüntüsünün yüksekliği |
SM_CYVSCROLL |
Dikey
akıtma çubuğu üzerindeki ok bitmap görüntüsünün yüksekliği |
SM_CYVTHUMB |
Dikey
akıtma çubuğu üzerindeki akıtma düğmesinin yüksekliği |
AKITMA
ÇUBUĞUNA İLİŞKİN FONKSİYONLAR
Aşağıda listelenen
fonksiyonlar, akıtma çubukları ile ilgili birtakım işlemler yapmaktadır :
FONKSİYON
ADI
|
GÖREVİ
|
EnableScrollBar |
Akıtma çubuğunun her iki ucunda yer alan okların aktif/pasif yapılmasında
kullanılır. Fonksiyonun ilk parametre değişkeni bir pencereye ya da akıtma
çubuğuna ilişkin tutamaç değeridir. İkinci parametre değişkeni, akıtma çubuğunun
tipini belirler. Bu parametre değişkeni yerine kullanılabilecek sembolik
sabitler ve anlamları şöyledir :
- SB_BOTH : Bu sembolik sabit kullanılacaksa ilk parametre değişkeni olarak
bir pencereye ilişkin tutamaç değeri geçilmelidir. SB_BOTH, tutamaç değeri
verilen pencerenin hem yatay hem de düşey akıtma çubuklarının aktif/pasif
yapılmasını sağlar.
- SB_CTL :Bu sembolik sabit kullanılacaksa ilk parametre değişkeni olarak
bir akıtma çubuğu kontrolüne ilişkin tutamaç değeri girilmelidir. SB_CTL
tutamaç değeri verilen akıtma çubuğunun aktif/pasif yapılmasında kullanılır.
- SB_HORZ : Bu sembolik sabit kullanılacaksa ilk parametre değişkeni olarak
bir pencereye ilişkin tutamaç değeri geçilmelidir. SB_Horz, tutamaç değeri
verilen pencerenin yatay akıtma çubuğunun aktif/pasif yapılmasını sağlar.
- SB_VERT : Bu sembolik sabit kullanılacaksa ilk parametre değişkeni olarak
bir pencereye ilişkin tutamaç değeri geçilmelidir. SB_Horz, tutamaç değeri
verilen pencerenin dikey akıtma çubuğunun aktif/pasif yapılmasını sağlar.
Fonksiyonun son parametre değişkeni, akıtma çubuğunun hangi ucunda yer alan
okların aktif/pasif yapılacağını belirler. Bu parametre değişkeni yerine
kullanılabilecek sembolik sabitler veanlamları şöyledir :
- ESB_DISABLE_BOTH : Her iki uçtaki ok da işlemden etkilensin.
- ESB_DISABLE_DOWN : Dikey bir akıtma çubuğunun alt ucundaki ok işlemden
etkilensin.
- ESB_DISABLE_LEFT : Yatay bir akıtma çubuğunun sol ucundaki ok işlemden
etkilensin.
- ESB_DISABLE_LTUP : Yatay bir akıtma çubuğunun sol ucundaki ya da dikey
bir akıtma çubuğunun üst kısmındaki ok işlemden etkilensin.
- ESB_DISABLE_RIGHT : Yatay bir akıtma çubuğunun sağ ucundaki ok işlemden
etkilensin.
- ESB_DISABLE_RTDN : Dikey bir akıtma çubuğunun sağ ucundaki veya dikey
bir akıtma çubuğunun alt ucundaki ok işlemden etkilensin.
- ESB_DISABLE_UP : Dikey bir akıtma çubuğunun üst ucundaki ok işlemden etkilensin.
- ESB_ENABLE_BOTH : Akıtma çubuğunun her iki ucundaki ok işlemden etkilensin.
Fonksiyon bir hata oluşması durumunda ya da kontrolün zaten yapılması istenen
halde olması durumunda sıfır, diğer durumlarda sıfır dışı bir değer döndürür. |
GetScrollPos |
Akıtma
çubuğunun düğmesinin o anki konum bilgilerini getirir. Konum değerleri,
akıtma oranına bağlı göreceli değerlerdir. Akıtma oranı 0-100 arasında olan
bir akıtma çubuğunun düğmesi tam ortada ise, konum bilgisi 50 olarak getirilecektir.
Fonksiyonun ilk parametre değişkeni konum bilgisi alınacak kontrolun tutamaç
değeridir. İkinci parametre değişkeni, akıtma çubuğunun tipini belirler.
Bu parametre değişkeni yerine geçilebilecek sembolik sabitler şunlardır
:
- SB_CTL : Akıtma çubuğunun, kontrol olduğu anlamına gelir. Bu değerin kullanılması
durumunda, ilk parametre değişkeni yerine bir akıtma çubuğu kontrolüne ilişkin
tutamaç değeri geçilmelidir.
- SB_HORZ : Standart yatay akıtma çubuğunun düğmesinin konum bilgisinin
alınacağı anlamına gelir.
- SB_VERT : Standart dikey akıtma çubuğunun düğmesinin konum bilgisinin
alınacağı anlamına gelir.
Fonksiyon, başarılı olması durumunda konum bilgisi ile, diğer durumlarda
0 değeri ile geri döner. |
GetScrollInfo |
Bir
akıtma çubuğuna ilişkin tüm değerlerin alınmasını sağlar. Alınan değerler,
en küçük ve en büyük akıtma konumları, sayfa büyüklüğü, akıtma düğmesi konumudur.
İlk parametre değişkeni bilgisi alınacak akıtma çubuğunun tutamaç değeridir.
İkinci parametre değişkeni, SB_CTL, SB_HORZ, SB_VERT sembolik sabitleri
ile belirlenen akıtma çubuğu tipidir. Üçüncü parametre değişkeni alınacak
bilgilerin kaydedileceği SCROLLINFO türünden bir yapı nesnesinin adresidir.
Bu yapı nesnesinin fMask isimli veri elemanı, hangi bilgilerin alınacağını
belirlemek amacıyla kullanılır. fMask veri elemanının alabileceği değerler
şunlardır :
- SIF_PAGE : Akıtma çubuğunun akıtma sayfası bilgisi yapı nesnesinin nPage
isimli veri elemanına atansın.
- SIF_POS : Akıtma çubuğunun akıtma konumu değeri yapı nesnesinin nPos isimli
veri elemanına atansın.
- SIF_RANGE : Akıtma çubuğunun akıtma oranı bilgileri yapı nesnesinin nMin
ve nMax isimli veri elemanlarına atansın.
Fonksiyon başarılı olması durumunda sıfır dışı bir değere, başarısız olması
durumunda 0 değerine geri döner. |
GetScrollRange |
Akıtma
çubuğunun sahip olduğu en küçük ve en büyük akıtma konumları değerlerinin
alınmasını sağlar. İlk parametre değişkeni olarak bilgisi alınacak akıtma
çubuğunun tutamaç değeri geçilir. İkinci parametre değişkeni, SB_CTL, SB_HORZ,
SB_VERT sembolik sabitleri ile belirlenen akıtma çubuğu tipidir. Fonksiyon
başarılı olması durumunda sıfır dışı bir değere, başarısız olması durumunda
0 değerine geri döner. |
ScrollDC |
Yatay
ve dikey olarak belli bir miktarda (bir dikdörtgen oluşturan bit grubu)
akıtma yapılmasını sağlar. İlk parametre değişkeni olarak akıtılacak bitleri
içeren Device Context (DC)e ilişkin tutamaç değeri verilir. İkinci parametre
değişkeni, yapılacak yatay akıtmanın miktarıdır. Sola doğru akıtma yapılacaksa
bu değer negatif bir sayı olmalıdır. Üçüncü parametre değişkeni, yapılacak
dikey kaydırmanın miktarıdır. Dördüncü parametre değişkeni, akıtma dikdörtgeninin
koordinatlarını belirten RECT türünden bir yapı nesnesidir. Beşinci parametre
değişkeni, kırpma (clipping) dikdörtgeninin koordinatlarını içeren RECT
türünden bir yapı nesnesidir. Yapılacak olan işlemden sadece kırpma dikdörtgeni
içerisinde kalacak olan kısım etkilenir. Kırpma dikdörtgeninin içerisine
gelen bitler yeniden çizilir, kırpma dikdörtgeni dışına çıkan bitler ise
çizilmez. Altıncı parametre değişkeni, akıtma işleminin oluşturduğu bölgeyi
belirler. Bu bölge ScrollDC tarafından belirlenir. Yedinci parametre değişkeni,
güncellenecek akıtma bölgesini sarmalayan dikdörtgenin koordinatlarını içeren
RECT türünden bir yapı nesnesidir. Bu değer, yeniden çizilmesi gereken en
büyük alan miktarını belirler. Fonksiyon başarılı olması durumunda sıfır
dışı bir değere, başarısız olması durumunda 0 değerine geri döner. |
ScrollWindow |
Pencere
kullanım alanının içeriğinin akıtılmasını sağlar. İlk parametre değişkeni
akıtma işleminin uygulanacağı pencerenin tutamaç değeridir. İkinci parametre
değişkeni, yatay akıtma miktarını belirtir. Üçüncü parametre değişkeni dikey
akıtma miktarını belirtir. Dördüncü parametre değişkeni, akıtma dikdörtgeninin
koordinatlarını içeren RECT türünden bir yapı nesnesidir. Beşinci parametre
değişkeni, kırpma dikdörtgeninin koordinatlarını içeren RECT türünden bir
yapı nesnesidir. Fonksiyon başarılı olması durumunda sıfır dışı bir değere,
başarısız olması durumunda 0 değerine geri döner. Bu fonksiyon geçmişe uyumluluk
açısından bulunmaktadır. Yeni uygulamalar için ScrollWindowEx fonksiyonu
kullanılmaktadır. |
ScrollWindowEx |
Pencere
kullanım alanının içeriğinin akıtılmasını sağlar. ScrollWindow fonksiyonuna
benzer iş yapar, ancak ilave birtakım özelliklere sahiptir. İlk parametre
değişkeni akıtma işleminin uygulanacağı pencerenin tutamaç değeridir. İkinci
parametre değişkeni, yatay akıtma miktarını belirtir. Üçüncü parametre değişkeni
dikey akıtma miktarını belirtir. Dördüncü parametre değişkeni, akıtma dikdörtgeninin
koordinatlarını içeren RECT türünden bir yapı nesnesidir. Beşinci parametre
değişkeni, kırpma dikdörtgeninin koordinatlarını içeren RECT türünden bir
yapı nesnesidir. Altıncı parametre değişkeni, güncelleme bölgesini belirten
tutamaç değeridir. Yedinci parametre değişkeni güncelleme dikdörtgeninin
koordinatlarını içeren RECT türünden bir yapı nesnesidir. Sekizinci parametre
değişkeni yapılacak işlemi belirten bir bayrak değişkendir. Bu parametre
değişkeni yerine geçilebilecek sembolik sabitler şunlardır :
- SW_ERASE : WM_ERASEBKGND mesajı göndererek ilgili bölgenin silinmesini
sağlar.
- SW_INVALIDATE : Güncelleme bölgesi olarak belirtilen alanın akıtma işleminden
sonra geçersiz kılınmasını sağlar.
- SW_SCROLLCHILDREN : Akıtma dikdörtgeni ile kesişen tüm alt pencerelerde
akıtma yapılmasını sağlar. Tüm alt pencerelere WM_MOVE mesajı gönderilir.
Fonksiyon başarılı olması durumunda sıfır dışı bir değere, başarısız olması
durumunda 0 değerine geri döner. |
SetScrollInfo |
Bir
akıtma çubuğuna ilişkin değerlerin ayarlanmasını sağlar. Atanan değerler,
en küçük ve en büyük akıtma konumları, sayfa büyüklüğü, akıtma düğmesi konumudur.
Akıtma çubuğu verilen değerlere göre (gerekli ise) yeniden çizilir. İlk
parametre değişkeni bilgisi alınacak akıtma çubuğunun tutamaç değeridir.
İkinci parametre değişkeni, SB_CTL, SB_HORZ, SB_VERT sembolik sabitleri
ile belirlenen akıtma çubuğu tipidir. Üçüncü parametre değişkeni alınacak
bilgilerin kaydedileceği SCROLLINFO türünden bir yapı nesnesinin adresidir.
Bu yapı nesnesinin fMask isimli veri elemanı, hangi bilgilerin atanacağını
belirlemek amacıyla kullanılır. fMask veri elemanının alabileceği değerler
şunlardır :
- SIF_DISABLENOSCROLL : Verilen yeni değerler geçersiz değerler ise, kontrolü
pasif hale getir.
- SIF_PAGE : nPage isimli veri elemanındaki akıtma sayfası bilgisi kontrole
atansın.
- SIF_POS : nPos isimli veri elemanındaki akıtma konumu değeri kontrole
atansın.
- SIF_RANGE : nMin ve nMax isimli veri elemanlarındaki akıtma oranı bilgileri
kontrole atansın.
Son parametre değişkeni verilen yeni değerlere göre kontrolün yeniden çizilip
çizilmeyeceğini belirtir. Fonksiyon akıtma çubuğunun akıtma düğmesinin o
anki konum bilgisi ile geri döner. |
SetScrollPos |
Akıtma
çubuğunun akıtma düğmesinin konumunu ayarlamak için kullanılır. Akıtma çubuğu
verilen değerlere göre (gerekli ise) yeniden çizilir. Bu fonksiyon geçmişe
uyumluluk sağlanması açısından bulunmaktadır. Win32 temelli uygulamalarda
bu işlemin gerçekleştirilmesi için SetScrollInfo fonksiyonu kullanılmalıdır.
|
SetScrollRange |
Akıtma
çubuğunun en küçük ve en büyük akıtma miktarlarının ayarlanması için kullanılır.
Ayrıca standart bir akıtma çubuğunun gizlenmesi / gösterilmesi için de kullanılabilir.
Bu fonksiyon geçmişe uyumluluk sağlanması açısından bulunmaktadır. Win32
temelli uygulamalarda bu işlemin gerçekleştirilmesi için SetScrollInfo fonksiyonu
kullanılmalıdır. |
ShowScrollBar |
Akıtma
çubuğunun gösterilmesi / gizlenmesi için kullanılır. İlk parametre değişkeni
akıtma çubuğuna ilişkin tutamaç değeridir. İkinci parametre değişkeni, akıtma
çubuğunun tipini belirler. Bu parametre değişkeni yerine geçilebilecek sembolik
sabitler şunlardır :
- SB_BOTH : Bir pencereye ilişkin standart yatay ve dikey akıtma çubuklarına
uygulansın.
- SB_CTL : Akıtma çubuğunun, kontrol olduğu anlamına gelir. Bu değerin kullanılması
durumunda, ilk parametre değişkeni yerine bir akıtma çubuğu kontrolüne ilişkin
tutamaç değeri geçilmelidir.
- SB_HORZ : Standart yatay akıtma çubuğuna uygulansın.
- SB_VERT : Standart dikey akıtma çubuğunun düğmesinin konum bilgisinin
alınacağı anlamına gelir.
Üçüncü parametre değişkeni, akıtma çubuğunun gösterilmesini ya da gizlenmesini
belirten bir değerdir. Fonksiyon, başarılı olması durumunda konum bilgisi
ile, diğer durumlarda 0 değeri ile geri döner. |
SCROLLINFO
YAPISI
Akıma çubuğu ile
ilgili yapılan işlemlerde SCROLLINFO isminde bir yapı kullanılır. Akıtma çubuğu
ile ilgili işlem yapan API fonksiyonları, parametre değişkeni olarak bizden
bu yapı nesnesi türünden bir nesnenin adresini isterler. Bu yapı içerisinde,
akıtma çubuğunun özelliklerine karşılık gelen veri elemanları bulunmaktadır.
Şimdi bu yapıyı ve veri elemanlarını inceleyelim :
typedef struct
tagSCROLLINFO {
       UINT cbSize;
       UINT fMask;
       int nMin;
       int nMax;
       UINT nPage;
       int nPos;
       int nTrackPos;
} SCROLLINFO;
typedef SCROLLINFO FAR *LPSCROLLINFO;
|
Yapının veri elemanlarını
sırasıyla ele alalım :
- cbSize: Yapının büyüklüğünün byte cinsinden değeridir.
- fMask : Alınacak ya da ayarlanacak özellikleri belirler. Bu değer aşağıdaki
sembolik sabitlerden birisi ya da bu sabitlerin mantıksal olarak birleştirilmesi
ile elde edilmiş bir değer olabilir :
SIF_ALL |
SIF_PAGE, SIF_POS, SIF_RANGE değerlerinin birleşimini ifade eder. |
SIF_DISABLENOSCROLL |
Bu
sembolik sabit, sadece özelliklerin atanacağı durumlarda kullanılabilir.
Verilen özelliklerin geçersiz değerler olması durumunda akıtma çubuğunun
pasif hale getirilmesini sağlar. |
SIF_PAGE |
nPage
isimli veri elemanının sayfa büyüklüğü bilgisini içereceğini belirtir. |
SIF_POS |
nPos
isimli veri elemanının akıtma kutusunun konum bilgisini içereceğini belirtir.
|
SIF_RANGE |
nMin
ve nMax isimli veri elemanlarının en küçük ve en büyük akıtma oranı değerlerini
içereceğini belirtir. |
- nMin : En küçük
akıtma konumunu belirler.
- nMax : En büyük akıtma konumunu belirler.
- nPage : Sayfa büyüklüğünü belirler.
- nTrackPos : Akıtma düğmesinin kullanıcının sürüklediği konum değerini belirler.
Bu değer SB_THUMBTRACK mesajının işlenmesi sırasında alınabilir.
AKITMA
ÇUBUĞU MESAJLARI
MESAJ
|
ANLAMI
|
SBM_ENABLE_ARROWS |
Akıtma çubuğunun her iki ucundaki okların aktif / pasif yapılması için gönderilir.
Mesajın wParam parametresi yapılacak işlemi ve uygulanacak oku belirler.
lParam parametrei kullanılmaz, sıfır geçilmelidir. wParam parametresi yerine
geçilecebilecek sembolik sabitler şunlardır :
- ESB_DISABLE_BOTH : Akıtma kutusunun her iki okunun da pasif hale getirilmesini
sağlar.
- ESB_DISABLE_DOWN : Dikey bir akıtma kutusunun alt okunun pasif hale getirilmesini
sağlar.
- ESB_DISABLE_LTUP : Yatay bir akıtma kutusunun sol okunun ya da dikey bir
akıtma kutusunun üst okunun pasif hale getirilmesini sağlar.
- ESB_DISABLE_LEFT : Yatay bir akıtma kutusunun sol okunun pasif hale getirilmesini
sağlar.
- ESB_DISABLE_RTDN : Yatay bir akıtma kutusunun sağ okunun ya da dikey bir
akıtma kutusunun alt okunun pasif hale getirilmesini sağlar.
- ESB_ENABLE_BOTH : Akıtma kutusunun her iki okunun da aktif hale getirilmesini
sağlar.
Mesajın işlenmesi sonucunda, işlem başarılı olmuşsa TRUE, diğer durumlarda
FALSE değeri döndürülür. |
SBM_GETPOS |
Bir
akıtma çubuğunun akıtma düğmesinin o anki konumunu öğrenebilmek için gönderilir.
Konum bilgisi, akıtma kutusunun sahip olduğu akıtma oranlarına bağlı olan
göreceli bir değerdir. wParam ve lParam parametreleri kullanılmaz, sıfır
geçilmelidir. İşlem başarılı olursa akıtma çubuğunun akıtma düğmesinin o
anki konum bilgisi döndürülür. |
SBM_GETRANGE |
Bir
akıtma çubuğu kontrolünün en küçük ve en büyük konum değerlerinin öğrenilmesi
amacıyla gönderilir. wParam parametresi en küçük konum bilgisinin yazılacağı
nesnenin adresini, lParam parametresi en büyük konum değerinin yazılacağı
nesnenin adresini belirtir. Geri dönüş değeri yoktur. |
SBM_GETSCROLLINFO |
Bir
akıtma çubuğunun özelliklerinin öğrenilmesi amacıyla gönderilir. wParam
parametresi kullanılmaz, sıfır geçilmelidir. lParam parametresi özelliklerin
yazılacağı SCROLLINFO türünden bir yapı nesnesinin adresidir. Başarılı olması
durumunda TRUE, diğer durumlarda FALSE değeri geri döndürülür. |
SBM_SETPOS |
Akıtma
çubuğu kontrolünün akıtma düğmesinin konumunun verilmesi için gönderilir.
wParam parametresi düğmenin yeni konumunu belirtir. lParam parametresi kontrolün
işlemden sonra yeniden çizilip çizilmeyeceğini belirten bir bayrak değişkendir.
Başarılı olması durumunda, akıtma düğmesinin bir önceki konum bilgisi, diğer
durumlarda sıfır değeri geri döndürülür. |
SBM_SETRANGE |
Akıtma
çubuğu kontrolünün en küçük ve en büyük konum değerlerinin verilmesi için
gönderilir. wParam parametresi en küçük akıtma konumunu, lParam parametresi
en büyük akıtma konumunu belirtir. Akıtma düğmesinin konumu değişmişse bir
önceki konum bilgisi, diğer durumlarda 0 değeri geri döndürülür. |
SBM_SETRANGEREDRAW |
Akıtma
çubuğu kontrolünün en küçük ve en büyük konum değerlerinin verilmesi ve
ardından yeniden çizilmesi için gönderilir. wParam parametresi en küçük
akıtma konumunu, lParam parametresi en büyük akıtma konumunu belirtir. Akıtma
düğmesinin konumu değişmişse bir önceki konum bilgisi, diğer durumlarda
0 değeri geri döndürülür. |
SBM_SETSCROLLINFO |
Akıtma
çubuğu kontrolünün özelliklerinin ayarlanması için gönderilir. wParam parametresi
kontrolün yeniden çizilip çizilmeyeceğini belirten bayrak değişkendir. lParam
parametresi kontrolün özelliklerinin atanacağı SCROLLINFO yapı nesnesinin
adresidir. Akıtma düğmesinin o anki konum bilgisi geri döndürülür. |
WM_CTLCOLORSCROLLBAR |
Bir
akıtma kutusu kontrolünün ana penceresine, kontrol çizileceği zaman gönderilir.
Ana pencere, bu mesajı yanıtlayarak kontrolün arkaplan rengini atayabilir.
wParam parametresi akıtma çubuğunun görünüm bağlamına (display context,
DC) ilişkin tutamaç değeri, lParam parametresi ise çubuğun tutamaç değeridir.
Uygulama içerisinde bu mesaj işlenmişse, bir fırça değerinin tutamaç değerine
geri dönülür. Windows bu fırça değerini kullanarak kontrolün arkaplan rengini
verir. |
WM_HSCROLL |
Bir
pencereye ilişkin standart yatay akıtma çubuğunda akıtma olayı gerçekleştiği
zaman pencereye gönderilir. Yatay bir akıtma çubuğu kontrolü için de kontrolün
ana penceresine gönderilir. wParam parametresinin düşük anlamlı dört biti
akıtma çubuğunun değerini, yüksek anlamlı dört biti akıtma düğmesinin konumunu
belirtir. lParam parametresi akıtma çubuğunun tutamaç değerini belirtir.
Uygulama içerisinde bu mesaj işlenmişse, sıfır değeri ile geri dönülür.
|
WM_VSCROLL |
Bir
pencereye ilişkin standart dikey akıtma çubuğunda akıtma olayı gerçekleştiği
zaman pencereye gönderilir. Dikey bir akıtma çubuğu kontrolü için de kontrolün
ana penceresine gönderilir. wParam parametresinin düşük anlamlı dört biti
akıtma çubuğunun değerini, yüksek anlamlı dört biti akıtma düğmesinin konumunu
belirtir. lParam parametresi akıtma çubuğunun tutamaç değerini belirtir.
Uygulama içerisinde bu mesaj işlenmişse, sıfır değeri ile geri dönülür. |
Bir yazımızın daha
sonuna geldik. Önümüzdeki yazılarda yapacağımız uygulamalarda akıtma çubuklarını
kullanarak, bu yazıda gördüğümüz teorik bilgileri uygulamaya çalışacağız. Tüm
okuyucularıma iyi günler dilerim.
KAYNAKLAR
- Win32 Programlama
Yardım Sayfaları
Makale:
Windows API - Akıtma Çubuğu Kontrolü C ve Sistem Programlama Çiğdem Çavdaroğlu
|