Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Çiğdem Çavdaroğlu
Çiğdem Çavdaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
28 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: akitma belirtir. degeri degiskeni degiskeni iliskin kaydirma konumunu kullanilir. kutusu kutusunun nesnenin parametre pencere standart C / Sys Prog. Çiğdem Çavdaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 8.12.2006
Okunma Sayısı : 33089
Yorum Sayısı : 4     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Windows API - Akıtma Çubuğu Kontrolü
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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üğü 16’ya 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, 1’den 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 API’si 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
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
22
2006
akitma cubugu banada garip geldi..
ARA
19
2006
Teknik terimlerin Türkçe karşılıkları için Bilişim Sözlüğünü kullanıyorum. (Internette bulabilirsiniz.) Bu sözlükte scroll bar teriminin karşılığı olarak akıtma çubuğu verilmiş. Ancak farklı sözlüklerde kaydırma çubuğu olarak çevrildiğini de gördüm. Kontrolün ekran üzerinde beli bir bölgenin, ya da bir bitmap dosyasının vb kaydırdığını düşünürsek, akıtma teriminin çok da yanlış olmadığını düşünüyorum. Kaydırdığımız şey stream olarak geçen ve Türkçeye akış olarak çevrilen bir içerik olabilir. Akıtma çubuğu ismi verilmesinin böyle bir nedeni olabilir.
ARA
18
2006
Makaleniz güzel, fakat Akıtma Çubuğu ismi çok ilginç geldi bana, ben bunu Kaydırma Çubuğu sanıyorum ve öyle kullanıyorum. Türkçe için de Akıtma Çubuğunun doğru olduğunu düşünmüyorum, yapılan fiil daha çok kaydırmadır. Akma-akıtma vs. fiiller daha çok sıvılar için kullanılır. Form ya da formdaki yazılar bilg. dünyasında somut veriler olarak kabul edilebilir ve kaydırma şeklinde kullanımıda daha doğru olur.
ARA
8
2006
istediğim bir makale saolun
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor