|
Naszym celem jest napisanie prostej przeglądarki do plików graficznych. Zakładamy, że ma wyświetlać wszystkie pliki automatycznie rozpoznawane przez .NET Framework jako obrazki (BMP, GIF, JPEG, PNG oraz TIFF). Obrazki będą jedynie identyfikowane przez ich rozszerzenie (*.bmp, *.gif, etc.). Polem działania naszego programu jest katalog, w którym program został uruchomiony, bądź katalog, w którym znajduje się plik podany jako argument dla programu.
Mając w ten sposób sformułowane zadanie można zacząć pracę. Tworzymy nowy projekt Visual Studio .NET, Windows Application. Nasza przeglądarka ma wyświetlać obrazki na pełnym ekranie, więc zmieniamy właściwości głównego formularza w designerze:
Appearance/BackColor = Black; - czarne tło dla aplikacji
Appearance/FormBorderStyle = None; - brak obramowania okna
Appearance/Text = “SimpleViewer”; - nazwa okna w Task Managerze
Design/(Name) = “SimpleViewerForm”; - nazwa instancji klasy w kodzie
Layout/WindowState = Maximized; - początkowy stan okna to zmaksymalizowany
Window Style/ControlBox = False; - bez kontrolek systemowych (min/max/zamknięcie)
Window Style/TopMost = True; - opcjonalnie, by okno zawsze było na wierzchu
Window Style/Icon = ...; - opcjonalnie, wskazuje ikonkę do użycia
Najwygodniejszym dla programisty sposobem przedstawienia obrazka jest podpięcie go pod odpowiednią kontrolkę. .NET Framework posiada klasę System.Windows.Forms.PictureBox, która nawet jak sama nazwa wskazuje, doskonale nada się do naszych celów.
Przeciągamy PictureBox na nasz formularz i ustawiamy właściwości:
Behavior/SizeMode = CenterImage; - sposób skalowania obrazka (wyśrodkowanie)
Design/(Name) = „pictureBox”; - nazwa instancji klasy w kodzie
Layout/Dock = Fill; - sposób „dokowania” kontrolki (wypełenienie)
Właściwości, nie wymienione powyżej, pozostawiamy z domyślnymi wartościami. Ponieważ program będzie pracował na systemie plików (odczyt obrazków), należy zadeklarowac użycie przestrzeni nazw System.IO:
using System.IO;
Aby program przyjmował jakieś parametry z linii poleceń, należy zmienić definicję punktu startowy programu oraz domyślnego konstruktora formularza, przekazując argumenty z linii poleceń:
public class SimpleViewerForm : System.Windows.Forms.Form { ... private string[] args; ... public SimpleViewerForm(string[] args) { ... } ... static void Main(string[] args) { Application.Run(new SimpleViewerForm(args)); } ... }
Jeśli przy uruchomieniu aplikacji zostaną podane argumenty, pierwszy z nich traktowany jest jako nazwa pliku z obrazkiem, który chcemy wyświetlić. Jeśli nie zostaną podane żadne argumenty – przeglądarka będzie wyświetlać pliki z aktualnego katalogu, posortowane alfabetycznie. Lista takich plików jest tworzona przez metodę:
private System.Collections.ArrayList GetFilenames(string path, string[] patterns) { System.Collections.ArrayList filenameList = new System.Collections.ArrayList(); foreach(string pattern in patterns) foreach(string filename in System.IO.Directory.GetFiles(path, pattern)) filenameList.Add(filename); filenameList.Sort(); return filenameList; }
Kolejno dla ścieżki (path) sprawdzane są wzorce (patterns) i jeśli w katalogu roboczym znajdują się pliki, które spełniają podane kryteria – dodawane one są do kolekcji plików. Następnie kolekcja plików jest sortowana i zwracana.
Obrazek jest wyświetlany za pomocą metody:
private void DisplayImage(int index);
Metoda ta proporcjonalnie skaluje obrazek, jeśli jest większy niż dostępny rozmiar ekranu. Warto zwrócić uwagę na implementację, która uniezależnia aplikację od aktywnej rozdzielczości – okno wyświetlania jest maksymalizowane, więc jego rozmiary są równe aktualnej szerokości i wysokości ekranu w pikselach. Najpierw jest ładowany do pamięci obrazek, jeśli taka potrzeba istnieje - wykonywane jest skalowanie – następnie obrazek jest wyświetlany (patrz: załączony kod źródłowy).
Aplikacja reaguje na trzy klawisze: Page Up – zmiana obrazka o jeden „w górę”, Page Down – zmiana obrazka o jeden „w dół” oraz Escape – zakończenie programu. Obsługą klawiszy zajmuje się:
private void SimpleViewerForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { switch(e.KeyCode) { case System.Windows.Forms.Keys.PageDown: ... return; case System.Windows.Forms.Keys.PageUp: ... return; case System.Windows.Forms.Keys.Escape: this.Close(); return; } } }
Stworzoną w ten sposób aplikację można skojarzyć z odpowiednimi rozszerzeniami (*.bmp, *.gif, *.jpg, *.jpeg, *.jpeg, *.tif) w Explorerze i używać jako prostej domyślnej przeglądarki obrazków. Niewątpliwą zaletą tej aplikacji jest jej duża przenośność, ze względu na jej „ciężar” – 24.5kb i możliwość szybkiego przełączenia podglądu na inne obrazki w tym samym katalogu.
W całym załączonym kodzie źródłowym zamieszczone są szczegółowe komentarze. Zdecydowałem się pisać je po angielsku dla większej jednolitości kodu. Zachęcam wszystkich do zapoznania się z kodem.
-Marcin ‘Vigrid’ Seredyński
|