programming Windows 10
ke kořenům UWP
5.9.2020 vjj 1
geneze• 2001 - 2007 zlatá éra, Longhorn -> Windows Vista
nebyla dokončena realizace .NET kernel, spousta nových pokročilých vlastností měla problém s nedostatečným výkonem většiny tehdejších PC a s nedostatkem driverů vyhovujících novému standardu
• Microsoft – výměna generací, technologickou společnost ovládli obchodníci, šéfem divize vývoje Windows Steven Sinofsky, vycházející manažerská hvězda, zkušenosti z divize mobilní verze Windows, nahradil Windows Mobile (původně Pocket PC se 100% podílu na trhu smartphonů -> 10% -> Windows Mobile se 40%) systémem Microsoft Phone ( -> 0%),zapřisáhlý nepřítel multitaskingu a oken, mobilní divize vytlačila desktopovou,zastaven vývoj pokročilých technologií (WinFS - Windows Future Storage - Database File System), zahájena úprava Windows pro tablety (budoucí Window 8)
• 2009 Windows 7 – bleskové provizorium vzniklé pouhou tvrdou redukcí pokročilých vlastností Visty, protože většina uživatelů buď Windows Vista vůbec neznala, nebo měla špatné zkušenosti z provozu na nedostatečně výkonném HW , bylo možné i ten zbytek pokročilých vlastností Windows Vista fungujících už na novějším HW prezentovat jako úžasný přínos Sinofskyho
• 2012 Windows 8 - fibred GUI z verze pro tablet jako runtime nad jádrem Windows Vista, zničený DWM (důvodem byl plánovaný přechod na full-screen apps only)
• 2015 Windows 10 - jádro Windows Vista, mixed GUI
5.9.2020 vjj 2
Windows• Event driven architecture
• zprávy
• požadavek na vykonání konkrétní činnosti nebo předání informace
• adresátem je, až na výjimky, nějaké okno
• fronty zpráv (každé vlákno kterému patří nějaké okno)
• zprávy vs. API funkce
• API funkce
• Kernel implementace základních funkcí OS Windows
• zkratky za složitější sekvenci zpráv a dalších API funkcí s kontrolou správného pořadí a parametrů
9/5/2020 vjj 3
okno• různé typy oken - Window Class
• Window Class – WinProc – handler zpráv pro všechny instance oken této třídy v programu
• Win32 API a WinForms - i ovládací prvky uvnitř okna jsou samostatnými okny (jejich WinProc většinou předdefinována v nějaké DLL knihovně) - komunikace ovládacích prvků s rodičovským oknem pomocí standardních zpráv
• WPF - kompletní okno včetně všech vložených ovládacích prvků je jediným oknem - komunikace ovládacích prvků s oknem interně (runtime)
9/5/2020 vjj 4
fronta zpráv• každé forgroundové vlákno (alespoň jednou
vytvořilo nové okno) má frontu zpráv
• vlákno musí (!) umět vybírat z fronty zprávy(tj. zprávy pro všechna svá okna, včetně všech jejich podoken, např. ovládacích prvků), nikdo jiný to za něj neudělá
• a zajistit jejich zpracování příslušnou WinProc(jak, když WinProc ovládacích prvků je ukryta někde v DLL? - DispatchMessage)
5.9.2020 vjj 5
struktura Win32 API programuWinMain ( ... ){ ...
while (GetMessage ( &Msg, ... ) )
DispatchMessage (&Msg, ... ) ;}
myWindowProc ( msg, ... ){ switch (msg){ case WM_CREATE: ... ;
case WM_PAINT: ... ;case WM_COMMAND: ... ;case WM_CLOSE: ... ;case WM_DESTROY: ... ;default: return DefWindowProc(...); } }
9/5/2020 vjj 6
Uživatel(mouse, keyboard)
hardware interruptDRIVER
System message queue
RITRaw Input Thread
GetMessage
DispatchMessage
WindowProcWindowProc
Fronta zpráv
Fronta zpráv
9/5/2020 vjj 7
klasické zpracování zprávswitch (msg) {
case WM_CREATE : inicializace instance okna;return 0 ;
case WM_PAINT : BeginPaint (...) ;...
EndPaint (...) ;return 0 ;
case WM_CLOSE : ověření úmyslu zavřít okno (skončit aplikaci)(programátor nevěří, že uživatel chce to,co si vybral, viz výtah fy Sirius Cybernetics)úklid;DestroyWindow (...) ;return 0 ;
case WM_DESTROY : destrukce instance okna;pokud má skončit celá aplikace, tak iPostQuitMessage (0) ; return 0 ;
default : return DefWindowProc (hWin, msg, wParam, lParam); }
9/5/2020 vjj 8
DefWindowProc
• standardní zpracování většiny zpráv
• mnoho běžných událostí je zpracováváno postupně pomocí celé posloupnosti nových zprávzaslaných většinou stejnému oknu
• při programování vlastní reakce na zprávu je tudíž nutné znát její kontext a dodržovat určitá pravidla(protokol)
9/5/2020 vjj 9
objektové nadstavby
switch (msg) {
case WM_msg1 : tabulka event handlerů 1;return 0 ;
case WM_msg2 : tabulka event handlerů 2;return 0 ;
case WM_msg3 : tabulka event handlerů 3;return 0 ;
case WM_msg4 : tabulka event handlerů 4;return 0 ;
case WM_msg5 : tabulka event handlerů 5;return 0 ;
default : runtime default -> return DefWindowProc (...); }
9/5/2020 vjj 10
.NET P/Invoke
using System.Runtime.InteropServices;
[DllImport("dwmapi.dll",
PreserveSig = false)]
public static extern voidDwmEnableBlurBehindWindow
( IntPtr hWnd,
DWM_BLURBEHIND pBlurBehind );
• P/Invoke = Platform Invocation Services
9/5/2020 vjj 11
Windows 8
9/5/2020 vjj 12
WinRT Runtime
(new Windows native runtime)
HTML 5
JavaScript
Windows 8
9/5/2020 vjj 13
WinRT Runtime
(new Windows native runtime)
C#
XAML
HTML 5
JavaScript
Windows 8
9/5/2020 vjj 14
WinRT Runtime
(new Windows native runtime)
C#
XAML
HTML 5
JavaScript
C++
COM
DirectX
Windows 8
9/5/2020 vjj 15
WinRT Runtime
(new Windows native runtime)
C#
XAML
HTML 5
JavaScriptC++
COM
DirectX
Win32 API
Windows runtimes
9/5/2020 vjj 16
Kernel: implementace Win32 API funkcí
Win32 API funkce
(in DLLs, stubs to Kernel)
Pascal/
Delphi
runtime
Borland
Pascal
for
Windows
->
Delphi
VB
runtime
Visual
Basic
MFC
(AFX)
runtime
MFC
CLR =
Common Language
Runtime
C#Visual
Basic
.NETF#
LightSwitch
runtime
VS
visual
editor
"WinRT"
"Core"
"OneCore"
UWP
runtime
Metro
C,
C++,
ASM
DLLs:
(objekty)
+
Win32 API framework
5.9.2020 vjj 17
dll: "UWP" runtime
Ntdll.dll
implementace API funkcí Windows
Drivers
Hal.dll
Hardware Abstraction Layer (HAL)
Win Store apps
SysCall
dll: CLR, WPF
.NET program
framework
Win32 API program
w/fibres
Subsystem DLLs: Kernel32.dll, User32.dll, GDI32.dll, Advapi32.dll, OLE32.dll
framework
Win32 API program
w/threads
Executive Kernel
.NET - Windows OS relation
User Mode
(Managed Code)
.NET App (Exe)
FCL (.NET Assemblies) (DLLs)
User Mode
(Native Code)
CLR (COM DLL Server)
Windows API DLLs
Kernel Mode Windows Kernel
5.9.2020 vjj 18
Windows OneCore/UWP• Windows OneCore (reinkarnace Windows CE)
is a platform for any device—phone, tablet, IoT, a navíc i desktop
• Windows 10 provides a set of API and DDI interfaces that are common to multiple editions of Windows 10.
• This set of interfaces is called OneCore.
• With OneCore, you can also be assured that drivers and apps that are created using OneCore interfaces will run on multiple devices.
5.9.2020 vjj 19
RAD
• Rapid application development is a form of Agile software development methodology.
5.9.2020 vjj 20
waterfall vs agile• Windows Vista
waterfall - dlouhý kaskádový vodopád, voda se dolů neřítí po vlnách, každá skupinka kapek přepadne dolu hned/teprve když je připravena, ale může být opět vrácena nahoru1. cyklus: analýza a interpretace požadavků a možností, námitky, kompromisy2. cyklus: high level design, prezentace, námitky, kompromisy3. cyklus: low level design, prezentace, námitky4. cyklus: implementace, testování, prezentace, námitky5. release
• Windows 8/10agilní = zbrklýjediný věčný cyklus: návrh, implementace, deployment(minimalistický návrh bez kompletní analýzy, funkčnost se doplňuje ažpodle reakcí uživatelů; chyby se neopravují okamžitě, ale návrh na opravu se řadí do fronty ostatních návrhů s nejasnými prioritami)
5.9.2020 vjj 21
5.9.2020 vjj 22
5.9.2020 vjj 23
5.9.2020 vjj 24