Windows 7 içerisinde Taskbar Thumbnail'leri yönetmek.

0 dakikada yazıldı

6694 defa okundu

Düzenle

Bir uygulama içerisinden birden çok pencerenin olduğu yılları
hatırlarsınız dersem belki de "O yıllar geride mi kaldı?"
diyebilirsiniz. MDI formları yıllarda uygulamalarımızın en önemli
parçaları oldular. Kullanıcı deneyimi olarak olabildiğince onlardan
kaçsak da farklı şekillerde de olsalar hep karşımıza çıkıyorlar. Sadece
MDI formları değil aslında TAB içeren tüm mekanizmalara konumuza dahil
edebiliriz. Örneğin Internet Explorer 8 içerisinde de birden çok tab
açarak aslında apayrı işler yapabiliyoruz. Aynı program içerisinde
çalışsak da aslında yaşanan deneyim son kullanıcı açısından ayrı bir
program kullanmaktan çok da farklı olmuyor.

Internet Explorer içerisinden farklı tablar taskbarda...
Internet Explorer içerisinden farklı tablar taskbarda...

Şöyle bir düşünsek acaba bizim de hazırladığımız programlarda
kullanıcıların böyle geçiş yapabilecekleri ekranlar var mıdır? Aynı
uygulama içerisinden bir anda birden çok ekran üzerinde çalışan
kullanıcılara taskbar üzerinden ulaşarak acaba bu ekranlara taskbardan
da ayrı ayrı ulaşabileceklerini belirtebilsek güzel olmaz mıydı? Gelin
bu durumda minik bir örnek ile bu işlevselliği programlarımıza nasıl
katabileceğimize göz atalım.

Ön Hazırlıklar

Örnek WPF uygulamamızı yarattığımız gibi
WindowsAPICodePack
ile beraber gelen Microsoft.WindowsAPICodePack.dll ve
Microsoft.WindowsAPICodePack.Shell.dll'i referans olarak projemize
eklemeliyiz. Yarattığımız bu yeni WPF projesine ayrıca System.Drawing'i
de referans alıp sonrasında XAML tarafına geçelim.

[XAML]

<Window
x
:Class="Window1"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Title="Window1"
Height
="300" Width="300">

    <Grid>

        <Image
x
:Name="Resim"
Source
="Koala.jpg" />

        <Image
x
:Name="Resim2"
Source
="Desert.jpg" />

    </Grid>

</Window>

Yukarıdaki şekli ile uygulamamızın ana ekranında iki tane resim yer
alacak. Bu resimler birbirlerinin üstündeler yani her zaman uygulama
ekranında normal şartlarda sadece tek resim gözükebilir. Bu resimleri
uygulamalarınız içerisinde farklı ekranlar olarak kabul edebilirsiniz.
Amacımız kullanıcılar taskbar üzerinden bu iki resim arasında geçiş
yapabilmelerini ve bu iki resmi sanki uygulamanın iki ayrı arayüzüymüş
gibi görebilmelerini sağlamak.

[VB]

        If
TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim)
Is Nothing Then

            Dim GenT =
Resim.TransformToVisual(Application.Current.MainWindow)

            Dim Nokta As Point = GenT.Transform(New Point(0, 0))

            Dim Thumbnail As New
TabbedThumbnail(Application.Current.MainWindow, Resim, New Vector(Nokta.X, Nokta.Y))

            Thumbnail.Tooltip = "Bu bir
foto!"

            AddHandler
Thumbnail.TabbedThumbnailActivated, AddressOf
Thumbnail_TabbedThumbnailActivated

           
TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail)

        End If

[C#]

            if (TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim)
== null) {

                var GenT =
Resim.TransformToVisual(Application.Current.MainWindow);

                Point Nokta =
GenT.Transform(new Point(0, 0));

                TabbedThumbnail
Thumbnail = new TabbedThumbnail(Application.Current.MainWindow, Resim,
new Vector(Nokta.X, Nokta.Y));

                Thumbnail.Tooltip = "Bu
bir foto!"
;

                Thumbnail.TabbedThumbnailActivated +=
Thumbnail_TabbedThumbnailActivated;

                TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail);

            }

Kodumuz biraz karışık gibi gözükebilir fakat aslında epeyce basit. Gelin
satır satır inceleyelim. İlk olarak IF içerisinde kontrol ettiğimiz
noktadan bahsedelim. Bizim örneğimizde Resim nesnesi için Toolbar'da
bir Thumbnail yaratacağız o nedenle daha önce yaratılıp yaratılmadığını
kontrol etmekte fayda var. Kontrol işlemini GetThumbnailPreview
metodu ile yapabiliyoruz. Eğer daha önce thumbnail yaratılmamış ise
kodumuz çalışmaya devam edecek.

GenT ve Nokta değişkenlerimiz aracılığı ile aslında uygulama
içerisinde Thumbnail olarak kullanacağımız elementin uygulama
penceresine göre offsetini hesaplıyoruz. Bu bilgiyi bir Vector
nesnesi olarak bir sonraki adımda TabbedThumbnail yaratırken
kullanmak zorundayız. TabbedThumbnail nesnesi yaratmak aslında
işlemin sonuna geldiğimizi de gösteriyor. Bu nesneyi yarattıktan sonra
geriye bir tek onu taskbara eklemek kalıyor. TabbedThumbnail
yaratırken parametre olarak uygulamamızın hangi penceresine eklediğimizi
ve görsel nesnemizi (Resim) verirken son olarak da görsel nesnenin
pencereye göre offsetini veriyoruz. TabbedThumbnail 'in isterseniz
Tooltip ve Title özelliklerini de set ederek Taskbar'da gözükmelerini
sağlayabilirsiniz.

Son adım yarattığımız TabbedThumbnail 'in kullanıcı tarafından
seçildiğinde çalıştırılacak olan event-listener'ını eklemek. Bunun için
TabbedThumbnail nesnesinin TabbedThumbnailActivated adında bir
event'ı bulunuyor. Son olarak event bağlamasını da bitirdiğimize göre
artık AddThumbnailPreview ile TabbedThumbnail 'imizi taskbara
ekleyebiliriz.

Tek uygulama, taskbarda iki thumbnail!
Tek uygulama, taskbarda iki thumbnail!

Yukarıdaki şekli ile uygulamamızdaki iki farklı resim için de
TabbedThumbnail yaratarak Taskbara'a ekledikten sonra tek yapmamız
gereken her iki TabbedThumbnail'in de event listener'larında
uygulama arayüzünde gerekli değişiklikleri yapmak. Aşağıda uygulamanın
tam kodunu bulabilirsiniz.

Hepinize kolay gelsin.

[VB]

    Private Sub Window1_Loaded(ByVal sender As Object,
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded

        If
TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim) Is Nothing
Then

            Dim GenT =
Resim.TransformToVisual(Application.Current.MainWindow)

            Dim Nokta As Point = GenT.Transform(New Point(0, 0))

            Dim Thumbnail As New
TabbedThumbnail(Application.Current.MainWindow, Resim, New Vector(Nokta.X, Nokta.Y))

            Thumbnail.Tooltip = "Bu bir
foto!"

            AddHandler
Thumbnail.TabbedThumbnailActivated, AddressOf
Thumbnail_TabbedThumbnailActivated

           
TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail)

        End If

        If
TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim2)
Is Nothing Then

            Dim GenT =
Resim.TransformToVisual(Application.Current.MainWindow)

            GenT =
Resim2.TransformToVisual(Application.Current.MainWindow)

            Dim Nokta As Point = GenT.Transform(New Point(0, 0))

            Dim Thumbnail As New
TabbedThumbnail(Application.Current.MainWindow, Resim2, New Vector(Nokta.X, Nokta.Y))

            Thumbnail.Tooltip = "Bu başka
bir foto!"

            AddHandler
Thumbnail.TabbedThumbnailActivated, AddressOf
Thumbnail2_TabbedThumbnailActivated

           
TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail)

        End If

    End Sub

 

    Private Sub
Thumbnail_TabbedThumbnailActivated(ByVal sender As Object,
ByVal e As
Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs)

        Canvas.SetZIndex(Resim2, 10)

        Canvas.SetZIndex(Resim, 11)

    End Sub

 

    Private Sub
Thumbnail2_TabbedThumbnailActivated(ByVal sender As Object,
ByVal e As
Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs)

        Canvas.SetZIndex(Resim, 10)

        Canvas.SetZIndex(Resim2, 11)

    End Sub

[C#]

        private void Window1_Loaded(object sender, RoutedEventArgs e)

        {

            if (TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim)
== null) {

                var GenT =
Resim.TransformToVisual(Application.Current.MainWindow);

                Point Nokta =
GenT.Transform(new Point(0, 0));

                TabbedThumbnail
Thumbnail = new TabbedThumbnail(Application.Current.MainWindow, Resim,
new Vector(Nokta.X, Nokta.Y));

                Thumbnail.Tooltip = "Bu
bir foto!"
;

                Thumbnail.TabbedThumbnailActivated +=
Thumbnail_TabbedThumbnailActivated;

                TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail);

            }

            if (TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(Resim2)
== null) {

                var GenT =
Resim.TransformToVisual(Application.Current.MainWindow);

                GenT = Resim2.TransformToVisual(Application.Current.MainWindow);

                Point Nokta =
GenT.Transform(new Point(0, 0));

                TabbedThumbnail
Thumbnail = new TabbedThumbnail(Application.Current.MainWindow, Resim2,
new Vector(Nokta.X, Nokta.Y));

                Thumbnail.Tooltip = "Bu
başka bir foto!"
;

                Thumbnail.TabbedThumbnailActivated +=
Thumbnail2_TabbedThumbnailActivated;

                TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(Thumbnail);

            }

        }

 

        private void
Thumbnail_TabbedThumbnailActivated(object sender,
Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs e)

        {

            Canvas.SetZIndex(Resim2, 10);

            Canvas.SetZIndex(Resim,
11);

        }

 

        private void
Thumbnail2_TabbedThumbnailActivated(object sender,
Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs e)

        {

            Canvas.SetZIndex(Resim,
10);

            Canvas.SetZIndex(Resim2, 11);

        }

Örneklere ait kaynak kodlar - 12082009_3.rar (3,23
MB)