Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie Lokalnych Aplikacji.NET Architektura.

Podobne prezentacje


Prezentacja na temat: "Programowanie Lokalnych Aplikacji.NET Architektura."— Zapis prezentacji:

1 Programowanie Lokalnych Aplikacji.NET Architektura

2 Prymityw aplikacji WIN32.NET

3 Architektura aplikacji win32

4 Organizacja przetwarzania komunikatów GetMessage() – pobiera komunikat z kolejki TranslateMessage() – umożliwia systemowi lub funkcjom użytkownika przekształcenie niektórych komunikatów z klawiatury DispatchMessage() – inicjuje przekazanie komunikatu jako parametru odpowiedniego wołania funkcji obsługi okna PeekMessage() – pozwala sprawdzić czy jest jakiś komunikat w kolejce while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); }

5 FUNKCJA OBSŁUGI OKNA LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hDC; switch( msg ) {OBSŁUGA_KOMUNIKATÓW case WM_DESTROY: PostQuitMessage( 0 ); break; default:return DefWindowProc( hWnd, msg, wParam, lParam ); } return 0; }

6 Komunikat Reprezentowany przez ID Dodatkowe parametry: word long Oprócz powyższych informacji funkcja obsługi okna otrzymuje dodatkowo uchwyt okna – dlaczego ?

7 Komunikaty Rodzaje komunikatów zdarzenia I/O zdarzenia systemowe polecenia użytkownika/prywatne komunikaty aplikacji Komunikat może być umieszczony w kolejce związanej z aplikacją dostarczony z pominięciem kolejki – bezpośrednie wywołanie funkcji obsługi okna przez system (z komunikatem jako parametrem)

8 Przykładowe komunikaty WM_PAINT – wymusza przerysowanie obszaru roboczego (lub jego fragmentu) WM_DESTROY – zniszczenie okna zwykle kończy całą aplikację przez wysłanie WM_QUIT WM_RBUTTONDOWN – komunikat o zachowaniu (zmianie stanu) myszy WM_COMMAND – komenda systemowa. Jej typ jest określony przez dodatkowe dane wParam. WM_QUIT wysyłany przez PostQuitMessage() kończy główna pętlę zdarzeń Nieobsłużone komunikaty przekazywane są do systemu -> DefWindowProc()

9 Źródła komunikatów Kolejkowanych aplikacja PostMessage() klawiatura np.: WM_KEYDOWN mysz np.:WM_LBUTTONDOWN zdarzenia związane z GUI np.: WM_PAINT zdarzenia systemowe np.: WM_QUIT, WM_TIMER Niekolejkowanych aplikacja SendMessage() WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR.

10 Okno w systemie Dualizm okien systemowa struktura odzwierciedlająca obiekt graficzny prezentowany (lub nie) na ekranie struktura danych kontrolowana przez programistę pozwalająca wpływać na okna [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

11 CLI definicja platform wykonawczych implementowan przez CLR – MS.NET Framework ROTOR – Shared Source CLI CF - MS.NET Compact Framework (PDA/Smartphones) MS.NET Micro Framework Core CLR, DLR (Silverlight, IronPython) Mono DotGnu Portable.NET

12 .NET – środowisko wykonawcze CLR Obsługa wersjonowania komponentów Unifikacja modeli danych, bibliotek Definiowalny hierarchiczny system zabezpieczeń Kompatybilność z COM/COM+ Zarządzanie pamięcią, garbage colector Hierarchiczny układ funkcjonalności udostępnianiej przez system

13 .Net: rozwój.NET Framework 1.0 (VS 2002).NET Framework 1.1 (VS 2003).NET Framework 2.0 (VS 2005).NET Framework 3.5 (VS 2008).NET Framework 4.0 (VS 2010).NET Framework 4.5 (VS 2012)

14 .NET – kod wykonywalny Native Code Kompilatory języków ngen.exe JITC Microsoft Intermediate Language Kod źródłowy VB, C#, VC (?), COBOL,...

15 .NET – środowisko wykonawcze Natywny System Operacyjny CLR 2.0 Sterta Pula watków App1.exe Dll1.dll CLR 4.0 Sterta Pula watków App2.exe Dll2.dll

16 .NET – środowisko wykonawcze Kod zarządzalny - Managed Code Common Lnguage Routine Win32 Obudowa istniejących usług Nowe usługi

17 using System; using System.Drawing; namespace WindowsApplication1 { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; public Form1() protected override void Dispose( bool disposing ) /*... */ [STAThread] static void Main() { Application.Run(new Form1()); } } PRYMITYW APLIKACJI C#

18 Interfejs Użytkownika WindowForms – klasy w dużej mierze obudowujące kontrolki Win32 WebForms – klasy przeznaczone dla aplikacji WEB (IIS) (wzorowane na WF) dynamicznie dostosowujące się np. do typu przeglądarki i dostępnych protokołów WPF(Silverlight) – nowa warstwa prezentacji wykorzystująca DirectX dostępna od.NET 3.0

19 .Net: Okna dialogowe Użycie okienka dialogowego: ShowModal() - modalnie Show() – niemodalnie Automatycznie tworzone są składniki (atrybuty) zwiazane z kontrolkami systemowymi

20 .NET - lektura MSDN Hierarchia namespaces Mapa Api ->.NET class library: sp?url=/library/en- us/dndotnet/html/win32map.asp

21

22 Narzędzia SPY++ ILDASM.EXE REFLECTOR, DotPeek UISPY R# FXCop DEPENDENCY WALKER

23 Programowanie Lokalnych Aplikacji.NET WPF

24 WPF alternatywa dla Window Form Rezygnacja z koncepcji opartych na win32/16 XAML – język opisujący definicję GUI wbudowany databinding definiowany na poziomie definicji zasobów rozdzielenie wyglądu od logiki uzycie hierarchicznych stylów, separacja zachowań kontrolek od wyglądu (branding) wykorzystanie sprzętowej akceleracji (oparty na DirectX) odejscie od koncepcji interfejsu opartego o stały rozmiar pixla

25 WPF architektura

26 WPF sposoby realizacji aplikacji Kod – tradycyjny sposób (analog. Do WindowForms). Aplikacja jest generowana przez tworzenie instancji odpowiednich klas w kodzie. Kod+skompilowany markup (BAML). – preferowane i jedyne wspierane przez VS pdejście. Szablony w XAML są kompilowane i włączane do assembly. Kod+nieskompilowany markup (XAML) – to podejście ma gdy potrzebny jest dynamiczny interfejs – XamlReader (System.Windows.Markup) pozwala wczytac i skompilowax XAML w czasie wykonania.

27 Xaml pozwala definiować obiekty i ustawiać ich właściwości został zaprojektowny dla wygodnej pracy z WPF

28 XAML Struktura:

29 Narzędzia XAMLPAD, XAMLPAD+ VS2008, VS2010 Expression Blend

30 Pozycjonowanie elementów Canvas: Child controls provide their own layout. Canvas DockPanel: Child controls are aligned to the edges of the panel. DockPanel Grid: Child controls are positioned by rows and columns. Grid StackPanel: Child controls are stacked either vertically or horizontally. StackPanel VirtualizingStackPanel: Child controls are virtualized and arranged on a single line that is either horizontally or vertically oriented. VirtualizingStackPanel WrapPanel: Child controls are positioned in left-to-right order and wrapped to the next line when there are more controls on the current line than space allows. WrapPanel

31 Dock = "Top" Dock = "Bottom" Dock = "Left" This TextBox "fills" the remaining space.

32 Kontrolki Buttons: Button and RepeatButton.ButtonRepeatButton Dialog Boxes: OpenFileDialog, PrintDialog, and SaveFileDialog.OpenFileDialogPrintDialogSaveFileDialog Digital Ink: InkCanvas and InkPresenter.InkCanvasInkPresenter Documents: DocumentViewer, FlowDocumentPageViewer, FlowDocumentReader, FlowDocumentScrollViewer, and StickyNoteControl.DocumentViewer FlowDocumentPageViewer FlowDocumentReader FlowDocumentScrollViewer StickyNoteControl Input: TextBox, RichTextBox, and PasswordBox.TextBoxRichTextBox PasswordBox User Information: AccessText, Label, Popup, ProgressBar, StatusBar, TextBlock, and ToolTip.AccessTextLabel PopupProgressBarStatusBarTextBlockToolTip

33 Kontrolki Layout: Border, BulletDecorator, Canvas, DockPanel, Expander, Grid, GridView, GridSplitter, GroupBox, Panel, ResizeGrip, Separator, ScrollBar, ScrollViewer, StackPanel, Thumb, Viewbox, VirtualizingStackPanel, Window, and WrapPanel.BorderBulletDecoratorCanvas DockPanelExpanderGridGridView GridSplitterGroupBoxPanelResizeGrip SeparatorScrollBarScrollViewer StackPanelThumbViewbox VirtualizingStackPanelWindow WrapPanel Media: Image, MediaElement, and SoundPlayerAction.ImageMediaElement SoundPlayerAction Menus: ContextMenu, Menu, and ToolBar.ContextMenuMenuToolBar Navigation: Frame, Hyperlink, Page, NavigationWindow, and TabControl.FrameHyperlinkPage NavigationWindowTabControl Selection: CheckBox, ComboBox, ListBox, TreeView, and RadioButton, Slider.CheckBoxComboBoxListBox TreeViewRadioButtonSlider

34 WPF kontrolki WPF 4 – Calendar, DataPicker kontrolki można zagnieżdzać: ListBoxItem, ComboBoxItem mogą zawierać niemal dowolne elementy możliwe jest zdefinowanie wyglądu danych – (dataTemplates)

35 Data Binding

36 Binding Możliwy jest binding do kontrolek, xmla, obiektów, elementów spoza okna Dzieki bindingowi możliwa jest budowa bardzo cienkiego UI – cały kod definiujący wygląd jest w takim wypadku wyniesiony z kontrolera/prezentera co b. dobrze współgra z Testami Jednostkowymi

37 Definiowanie Bindingu Definicja programowa: Binding myBinding = new Binding("MyDataProperty"); myBinding.Source = myDataObject; myText.SetBinding(TextBlock.TextProperty, myBinding);

38 Source - domyślnie wskazuje na DataContekst (może być odziedziczone po poprzedniku). po ustawieniu source na wrtość != null operacje bindingu traktują s. jako miejsce z ktorego pobierać/w którym skladać dane. Source Path – pozwala określić property obiektu źródłowego (typu PropertyPath). Path ElementName – może być użyte jako alternatywna nazwa dla Source – pozwala określić nazwę elementu używanego jako źródło danych. ElementName Converter – (typu IValueConverter) – może zostać zainicjowane instancją obiektu konwerującego dane. ConverterIValueConverter WPF binding - elementy

39 Definiowanie Bindingu Xaml-1 Lub

40 Definiowanie Bindingu Xaml-2 < TextBox Text = "{Binding ElementName=ControlABC, Path=ColorName}" />

41 Definiowanie Zasobów źródło szablon

42 Szablon Pozwala określić sposób wyświetlania obiektu Szablon to foremka do produkcji zestawów kontrolek zbindowanych do danych Szablon moze byc Aplikowany do konkretnej kontrolki Domyslny dla typu danych

43 namespace WPF_Test { public class River { public string Name { get; set; } public int MilesLong { get; set; } } brak Data template

44 zdefiniowany Data template

45 Jeżeli obiekt nie ma zdefiniowanej dziedziczonej właściwości – wtedy używana jest wartość z elementu nadrzędnego (rodzica w drzewie). Uwaga! drzewo oznacza drzewo obiektów (np. kontrolek) a nie klas - analogicznie do ambient properties w Window Forms Można je ustawiać z poziomu XAML (jak zwykłe p.) WPF Dependancy properties

46 elementy w WPF mają właściwość DataContext jeżeli zostanie ona ustawiona na jakiś obiekt wszystkie elementy pochodne (dzieci w drzewie obiektów) przejmują (dziedziczą) tą wartość chyba, że explicite określimy inaczej Można w ten sposób określić binding dla całego drzewa obiektów WPF Data context

47 Binding - źródla danych obiekty CLR obiekty użytkownika kolekcje XML ADO Nie można bindować do pól (do właściwości jak najbardziej)

48 Przepływ danych w Bindingu OneWay TwoWay OneWayToSource

49 Wyzwalanie aktualizacji w Bindingu

50 Binding - konwersje "{Binding Path=TheDate, Converter={StaticResource MyConverterReference}}"

51 public class DoubleToIntegerConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, CultureInfo culture ) { return (int)(double)value; } public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture ) { throw new NotSupportedException( "Cannot convert back" ); } } WPF binding - konwertery

52 public class SumatorConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture ) { int s1 = (int)values[1]; int s2 = (int)values[2]; return s1+s2; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture ) { throw new NotSupportedException( "Cannot convert back" ); } WPF binding – konwertery wielowartościowe

53 WPF binding – konwertery wielowartościowe

54 Binding – walidacja Przebieg bindingu 1. Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości pierwotnych (ValidationStep ustawiony na RawProposedValue) 2. Uruchamiany jest konwerter (jeżeli istnieje), ew. błedy (wyjątki) przerywają proces 3. Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości wynikowych (ValidationStep ustawiony na ConvertedProposedValue) 4. Ustawiana jest wartość wynikowa 5. Uruchamiane są (jeżeli są) indywidualne reguły walidacji (do pierwszego błędu) dla wartości zaktualizowanych (ValidationStep ustawiony na UpdatedValue lub CommittedValue) Ew. błąd jest dodawany do kolekcji Validation.Errors skojarzonej z elementem (jest ona czyszczona przed p. 1).

55 Binding – dignostyka PresentationTraceSources.SetTraceLevel Lub

56 Użycie konwertera do inicjacji debugowania public class DatabindingDebugConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { Debugger.Break(); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { Debugger.Break(); return value; }

57 Formatowanie ? Dla potrzeb formatowania danych w szablonie można wykorzystać konweretery Przykład jak spowodować żeby wartość bool była wyświetlana jako tak/nie Podejście pierwsze: specjalizowany konwerter...

58 Formatowanie vs konwersja? [ValueConversion(typeof(bool), typeof(String))] public class BoolYesNoConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (bool)value ? "yes" : "no"; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; }

59 Formatowanie ? Podejście drugie – specjalizowany binding...

60 public class BoolBindingExtension : Binding { public BoolBindingExtension() { Initialize(); } public BoolBindingExtension(string path) : base(path) { Initialize(); } public BoolBindingExtension(string path, object valueIfTrue, object valueIfFalse) : base(path) { Initialize(); ValueIfTrue = valueIfTrue; ValueIfFalse = valueIfFalse; } private void Initialize() { ValueIfTrue = DoNothing; ValueIfFalse = DoNothing; Converter = new BoolConverter(this); } [ConstructorArgument("valueIfTrue")] public object ValueIfTrue { get; set; } [ConstructorArgument("valueIfFalse")] public object ValueIfFalse { get; set; } private class BoolConverter : IValueConverter {...} }

61 private class BoolConverter : IValueConverter { public BoolConverter(BoolBindingExtension boolExtension) { _bool = boolExtension; } private BoolBindingExtension _bool; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { try { bool b = System.Convert.ToBoolean(value); return b ? _bool.ValueIfTrue : _bool.ValueIfFalse; } catch { return DependencyProperty.UnsetValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return DoNothing; }

62 Podejście trzecie : biblioteka Kent.Boogaart.Converters True False

63 Style definicja xaml programowa w kodzie

64 trigger jest odpowiednikiem "if" – w kodzie proceduralnym trigger oparty na wielu wartościach Triggery, Path=""

65 Kolekcje vs. Binding Źródło odpowiada nie tylko za listę elementów ale równiez za wskaźnik bieżącego elementu (Path=/), na źródło mozna nakładac filtry, grupować elementy, sortować Scenariusz: master – detail Dla obiektów Ado aby sortowanie dlegowac do obiektu ado trzeba stosować kolekcji mozliwe obiekty CLR obiekty użytkownika kolekcje XML ADO

66 Polega na zmianie wskazanej właściwości okreslonego obiektu w zadanym rytmie Typy animacji: from/to/by: ColorAnimation, DoubleAnimation, PointAnimation key-frames: ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, PointAnimationUsingKeyFrames, StringAnimationUsingKeyFrames path: DoubleAnimationUsingPath, PointAnimationUsingPath WPF Animacje

67 Viewport3D Współrzedne przestrzeni 3D WPF Geometria 2d/3d

68 kamery, modele, siatki, materiały WPF elementy sceny

69 WPF Konstrukcja sceny

70 WPF Grupa 3D

71 WPF Swiatła

72 AmbientLight – światło otoczenia. Jego jedynym parametrem jest Color. DirectionalLight – światło kierunkowe. Posiada kolor oraz kierunek określony parametrem Direction, w jakim padają jego promienie. PointLight – światło punktowe. Parametry Position, Range(dł. fali), zmiana intensywności - (ConstantAttenuation,LinearAttenuation, QuadraticAttenuation). SpotLight – światło punktowo-kierunkowe. Parametry stożka: Position, Direction, InnerConeAngle,OuterConeAngle + wł. dla PointLight WPF światła

73 perspektywa – rzecz kamery WPF elementy sceny

74 DiffuseMaterial – materiał rozpraszający SpecularMaterial – materiał odblaskowy EmmisiveMaterial – materiał emisyjny tekstury WPF Materiały

75 WPF 3DPanel: Przykład – panel3d Josh Smith WPF vs grafika, animacje: Linki

76 WPF input events... zdefiniowane jako pary są implementowane tak że pojedyncza akcja np. kliknięcie myszą wywołuje dwa po sobie nastepujące zdarzenia tunneling bubble Oba zdarzenia współdzielą dokładnie tą samą instancję danych opisujących zdarzenie. Stąd zdarzenie może zostać obsłużone nie przez element, w którym miało miejsce us/magazine/cc aspx

77 WPF routed events PreviewMouseDown (tunnel) on root element. PreviewMouseDown (tunnel) on intermediate element #1. PreviewMouseDown (tunnel) on source element #2. MouseDown (bubble) on source element #2. MouseDown (bubble) on intermediate element #1. MouseDown (bubble) on root element. Bubbling: wołany jest event handler w el. źródłowym a potem kolejno w rodzicach. Direct: Tylko żródłowy element woła handler Tunneling: handlery wołane są od roota do źródła

78 WPF handler zdarzenia Zwykły handler zdefiniowany w elemencie Test Button Handler zdefinowany na zewnatrz elementu (attached event) Click Me

79 WPF obsługa zdarzenia Obsłużenie zdarzenia private void OnMyElementMouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; } Handler wołany zawsze (nawet dla z. obsłużonych) m_myElement.AddHandler(UIElement.MouseDownEvent, (RoutedEventHandler)OnMouseDownMyHandler,true);

80 Routed + Command = RoutedCommand Routted command vs klasyczna obsługa możliwość uruchamiania zdarzenia przez wiele źródeł (bez definiowania h. w kodzie) blokowanie wszystkich źródeł jednocześnie i automatycznie (->CommandManager) mozliwość oddzielenie kodu od samej formy (MVC) RoutedCommands-with-a-ViewModel-in-WPF WPF RoutedCommand

81 WPF definiowanie komendy Save

82 Renderowanie Layoutu Drzewo logiczne vs. Drzewo widoków Wymiarowanie 2 fazy: Measure i Align HorizontalAlignment = Left,...,Stretch Grid.Row,Grid.RowSpan Width, ActualWidth RowDefinition Height= "Auto", "*", "1 us/library/ms aspx#LayoutSystem_Measure_ Arrange

83 Dane dla designera xmlns:d="http://schemas.microsoft.com/expression/blend/2 008"... public MyData { get { return new Person() { Name = "Harry" }; } }... d:DataContext="{Binding RelativeSource= {RelativeSource Self}, Path=MyData}" 30/sample-data-in-the-wpf-and-silverlight-designer.aspx

84 WPF Dokumenty DocumentViewer FlowDocumentReader, FlowDocumentPageViewer, FlowDocumentScrollViewer XML Paper Specification (XPS) Więcej tu

85 WPF Typografia Skalowanie (urzadzenia mobilne) Wykorzystanie ClearType Duże usprawnienia w wersji 4.0 Więcej tu

86 WPF vs WinForms winforms/

87 wydzielony wątek do renderowania formy Dostęp z innego wątku Window1 win = (Window1) state; for (int i = 0; i ( (p, v) => p.Value = v), win.progress1, i); } WPF wielowątkowość

88 wpf/ wpf/ Ksiązki: WPF 4 Unleashed, Adam Nathan Advanced MVVM, Josh Smith WPF - źródła


Pobierz ppt "Programowanie Lokalnych Aplikacji.NET Architektura."

Podobne prezentacje


Reklamy Google