Programowanie w środowisku Windows. mgr inż. Krzysztof Mossakowski k.mossakowski@mini.pw.edu.pl http://www.mini.pw.edu.



Podobne dokumenty
Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

Podstawy programowania w języku C dla środowiska Windows

IFiZR Laboratorium 5 Info

Komunikaty w Windows. Jarosław Kuchta

Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

Podstawowy projekt OpenGL utworzony przy użyciu środowisk programistycznych firmy Microsoft.

Programowanie na poziomie sprzętu. Programowanie w Windows API

1.1. Programowanie dla Windows. Programowanie dla Windows. Komunikaty w systemie Windows. Application Programming Interface

Wprowadzenie do programowania w Windows

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie I. Wprowadzenie do programowania w Windows

Podstawy programowania w języku C dla środowiska Windows

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

Do nich też i tylko do nich będzie się w tym rozdziale odnosić sam termin okno.

Programowanie w środowiskach graficznych. Wykład 1 OS, Podstawy Windows API

Programowanie w środowiskach graficznych. Wykład 1 OS, Podstawy Windows API

Programowanie w języku C++ z użyciem Windows API

1. Wstęp. 2. Szablon. 1 WinApi Wstęp i szablon. Czym jest API?

Podstawy programowania w środowisku Windows. Oto identyfikatory najczęściej obsługiwanych meldunków (przedrostek WM to skrót od Windows message):

Programowanie w środowiskach RAD Język C++ w środowiskach RAD

Programowanie pod Windows

Cechy systemu Windows

PROE wykład 8 Interfejs użytkownika (GUI) dr inż. Jacek Naruniec

1 WSTĘP. Źródło : Wymagania i terminologia

Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.

Zegary. Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje.

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.5

PROGRAMOWANIE W SYSTEMIE WINDOWS

Microsoft Visual C++

PROGRAMOWANIE SYSTEMÓW WBUDOWANYCH INTER-PROCESS COMMUNICATION

Załącznik do ćwiczenia w środowisku MASM32 wersji 10. Tryb graficzny w systemie Windows

PROGRAMOWANIE. Programowanie Win32 dla programistów języka assemblera x86

Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych

1.1. Programowanie w Visual C++ Programowanie w Visual C++ Środowisko programisty Visual C++ Środowisko programisty Visual C++

Opis. Wykład: 30 Laboratorium: 30

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Delphi podstawy programowania. Dialogi

Spis tre Wst p... 2 Do czego słu zasoby... 2 Tworzenie zasobów... 4 Pisanie skryptu zasobów... 4 Korzystanie z zasobów w programach...

Instrukcja laboratoryjna cz.3

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

Microsoft Foundation Classes

Formaty plików graficznych - wprowadzenie

Zaawansowane środowiska programistyczne 2009/2010

Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (Delphi)

WPF 4.5 : księga eksperta / Adam Nathan. Gliwice, cop Spis treści

Windows Mobile. Andy Wigley, Daniel Moth, Peter Foot, Microsoft Mobile Development Handbook, Microsoft Press 2007

1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.

Programowanie obiektowe

Praca w środowisku Visual Studio 2008, Visual C

DLL Injection. Przejęcie kontroli nad procesem

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

mgr inż. Przemysław Kudłacik Trwałe przechwytywanie okien w systemach MS Windows

Programowanie MorphX Ax

Ikony GetSystemMetrics LoadIcon

Pliki wchodzące w skład projektu Rozmiar formatki, okna. Wyświetlanie okien komunikatów Rzutowanie Konwersja Tworzenie standardowych przycisków

Wykłady 1, 2. Wstęp do programowania w środowisku Visual C++ Autor: Zofia Kruczkiewicz

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Dodanie nowej formy do projektu polega na:

Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (C++ Builder)

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

Programowanie obiektowe

MVVM i XAML w Visual Studio 2015 / Jacek Matulewski. Gliwice, cop Spis treści

Wielozadaniowość w systemie Microsoft Windows

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

PROGRAMOWANIE GRAFIKI 2D W ŚRODOWISKU EMBARCADERO RAD STUDIO XE4 Z WYKORZYSTANIEM BIBLIOTEKI DirectX

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Biblioteka Windows Forms

Podstawy Programowania PalmOS

Najnowsza wersja dokumentu dostępna pod adresem

Microsoft IT Academy kurs programowania

Politechnika Wrocławska Urządzenia peryferyjne sprawozdanie z laboratorium 1. Zadania do wykonania 2. Wstęp teoretyczny 3. Realizacja ćwiczenia

Jak działają programy przechwytujące i. Hak na Windows

Qt - podstawowe cechy

KARTA MODUŁU KSZTAŁCENIA

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Windows Phone 7. Zacznij, Twórz, Zarabiaj. Paweł Żochowski. Action Centrum Edukacji

WebAii Automation Framework

MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Aplikacje w środowisku VBA. Visual Basic for Aplications

Wst p... 9 Rozdzia" 1. WinMain fundament aplikacji Windows Rozdzia" 2. Rysowanie w oknie... 51

Podstawy programowania. Wprowadzenie

Użycie Visual Basic for Applications ("VBA")

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Visual Studio instalacja

Programowanie RAD Delphi

Programowanie obiektowe

Interfejs użytkownika (ang. User Interface, UI) w technice część urządzenia odpowiedzialna za interakcję z użytkownikiem

Podstawy technologii cyfrowej i komputerów

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Szablony funkcji i szablony klas

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Podstawy Windows Phone 7.5

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Środowiska i platformy programistyczne

Transkrypt:

Programowanie w środowisku Windows mgr inż. k.mossakowski@mini.pw.edu.pl

Plan wykładu 1. Okna, komunikaty, czas, błędy 2. Typy, struktury, makra, mysz, klawiatura, wersje 3. GDI 4. Zasoby, okna dialogowe, kontrolki, skrolowanie 5. Aplikacja, formularze, zdarzenia, okna dialogowe, zasoby 6. Kontenery, kontrolki 7. Własne kontrolki Wprowadzenie, XAML, aplikacja 8. Kontrolki, zdarzenia, zasoby 9. Grafika 2D i 3D 10. Multimedia, animacja 11. Biblioteki DLL, schowek, rejestr, drukowanie, MDI 12. Pamięć, procesy i wątki, system plików 13. Windows Shell, style wizualne 14. Windows Mobile 15. Aplikacje wielojęzyczne, zasady tworzenia GUI Wykład 1-2 WIN32 API WINDOWS FORMS WPF INFORMACJE OGÓLNE

Wykład 1-3 Literatura Win32: R. Simon, Microsoft Windows 2000 API SuperBible, Sams, 2000 C. Petzold, Programming Windows, 5th Ed., Microsoft Press, 1998 J. Richter, C. Nassarre, Windows via C/C++, 5th Ed., Microsoft Press, 2008 Windows Forms: M. MacDonald, Pro.NET 2.0 Windows Forms and Custom Controls, Apress, 2006 C. Petzold, Programming Microsoft Windows with C#, Microsoft Press, 2002 I. Serban et al., GDI+ Custom Controls with Visual C# 2005, Packt Publishing, 2006 Windows Presentation Foundation: C. Anderson, Essential Windows Presentation Foundation, Addison-Wesley, 2007 M. MacDonald, Pro WPF in C# 2008, 2nd Ed., Apress, 2008 S. Noble et al., WPF Recipes in C# 2008, Apress, 2008 C. Petzold, Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation, Microsoft Press, 2006

Wykład 1-4 Narzędzia programistyczne dla Windows Windows API Win16 - do Windows 3.1 Win32s - Windows 3.1 Win32 - od Windows 95 i wszystkie wersje NT Visual Basic Visual C++ MFC (Microsoft Foundation Class Library) WTL (Windows Template Library) Visual J++.NET Windows Forms (.NET Framework 1.0+) Windows Presentation Foundation (.NET Framework 3.0+) Delphi Builder C++ Borland Developer Studio Qt GTK+ wxwidgets

Program w Win32 API Wykład 1-5 #include <Windows.h> int APIENTRY _twinmain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow ) {... MyRegisterClass(hInstance);... InitInstance(hInstance, ncmdshow);... while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wparam;

Wykład 1-6 Klasa okna Definiuje cechy okna (także funkcję obsługi komunikatów) Typy klas okien: systemowe (np. Button, ComboBox, ScrollBar, MDIClient) globalne aplikacji - dostępne dla wszystkich modułów lokalne aplikacji - bez flagi CS_GLOBALCLASS Rejestracja klasy: RegisterClass(CONST WNDCLASS *lpwndclass) RegisterClassEx(CONST WNDCLASSEX *lpwcx) Pobranie klasy: GetClassInfoEx(), GetClassLong() Modyfikacja klasy: SetClassLong()

Wykład 1-7 Składowe klasy okna lpszclassname [pobranie: GetClassName()] lpfnwndproc hinstance hcursor [alternatywa: SetCursor() i WM_SETCURSOR] hicon, hiconsm [alternatywa: WM_SETICON] hbrbackground [alternatywa: WM_ERASEBKGND] lpszmenuname style [np. CS_DBLCLKS] cbclsextra [użycie: SetClassWord(), GetClassWord()] cbwndextra [użycie: SetWindowLong(), GetWindowLong()]

Rejestracja klasy okna Wykład 1-8 ATOM MyRegisterClass(HINSTANCE hinstance) { WNDCLASSEX wcex; wcex.cbsize = sizeof(wndclassex); wcex.style = CS_HREDRAW CS_VREDRAW; wcex.lpfnwndproc = (WNDPROC)WndProc; wcex.cbclsextra = 0; wcex.cbwndextra = 0; wcex.hinstance = hinstance; wcex.hicon = LoadIcon(hInstance, (LPCTSTR)IDI_MY001); wcex.hcursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrbackground =(HBRUSH)(COLOR_WINDOW+1); wcex.lpszmenuname = (LPCTSTR)IDC_MY001; wcex.lpszclassname = szwindowclass; wcex.hiconsm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); }

Funkcja CreateWindow Wykład 1-9 HWND CreateWindow( LPCTSTR lpclassname, LPCTSTR lpwindowname, DWORD dwstyle, int x, int y, int nwidth, int nheight, HWND hwndparent, HMENU hmenu, HINSTANCE hinstance, LPVOID lpparam ); HWND CreateWindowEx( DWORD dwexstyle, LPCTSTR lpclassname, LPCTSTR lpwindowname, DWORD dwstyle, int x, int y, int nwidth, int nheight, HWND hwndparent, HMENU hmenu, HINSTANCE hinstance, LPVOID lpparam );

Tworzenie okna BOOL InitInstance(HINSTANCE hinstance, int ncmdshow) { HWND hwnd; hwnd = CreateWindow(szWindowClass, sztitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hinstance, NULL); if (!hwnd) { return FALSE; } } ShowWindow(hWnd, ncmdshow); UpdateWindow(hWnd); return TRUE; Wykład 1-10

Wykład 1-11 Komunikaty Aplikacje Windows działają na zasadzie odpowiedzi na zdarzenia generowane przez system i użytkownika Miejscem obsługi komunikatów jest procedura okna Komunikat: parametry: hwnd, identyfikator komunikatu, wparam, lparam struktura MSG Typy komunikatów: systemowe WM_USER + _ WM_APP + _ zarejestrowane (RegisterWindowMessage())

Wykład 1-12 Kolejka komunikatów Kolejka komunikatów - FIFO w pamięci systemowej Komunikaty kolejkowane: interfejs użytkownika, np. WM_MOUSEMOVE, WM_CHAR WM_TIMER, WM_PAINT, WM_QUIT Funkcje dla kolejkowanych komunikatów: PostMessage(), PostThreadMessage() GetMessage(), PeekMessage(), DispatchMessage() GetMessageTime(), GetMessagePos() WaitMessage() SetMessageExtraInfo(), GetMessageExtraInfo()

Wykład 1-13 Komunikaty niekolejkowane Niekolejkowane komunikaty są bezpośrednio przekazywane do procedury okna Przykłady: powiadomienie okna o zdarzeniach dotyczących go, np. WM_ACTIVATE, WM_SETFOCUS, WM_SETCURSOR rezultat działania funkcji, np. WM_WINDOWPOSCHANGED po SetWindowPos() Funkcje wysyłające niekolejkowane komunikaty: SendMessage(), SendMessageCallback() BroadcastSystemMessage(), BroadcastSystemMessageEx() SendMessageTimeout() SendNotifyMessage() SendDlgItemMessage()

Wykład 1-14 Pętla komunikatów GetMessage() zwróci FALSE gdy odbierze WM_QUIT PostQuitMessage() wysyła WM_QUIT do kolejki Modyfikacje: TranslateAccelerator() TranslateMessage() IsDialogMessage() while (GetMessage(&msg, NULL, 0, 0)) { if (TranslateAccelerator(msg.hwnd, hacceltable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }

Wykład 1-15 Procedura okna Funkcja obsługi komunikatów przesyłanych do okna Wspólny kod dla wszystkich okien jednej klasy Parametry: HWND, UINT, WPARAM, LPARAM Zwraca wartość typu LRESULT charakterystyczną dla komunikatu Domyślna procedura okna: DefWindowProc() Zmiana procedury okna (subclassing) jednego okna: SetWindowLong(), GetWindowLong() klasy okien: SetClassLong(), GetClassLong() CallWindowProc() powoduje obsługę komunikatu w innej procedurze okna

Wykład 1-16 Przykład procedury okna LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc( hwnd, message, wparam, lparam); } return 0; }

Elementy okna Wykład 1-17

Wykład 1-18 Typy okien Overlapped okno główne (top-level) z tytułem, obramowaniem i obszarem klienta - najczęściej główne okno aplikacji WS_OVERLAPPED lub WS_OVERLAPPEDWINDOW Pop-up zwykłe okna dialogowe, okna komunikatów i inne pojawiające się poza oknem głównym WS_POPUP lub WS_POPUPWINDOW Child - okna potomne Layered [2000+] przezroczystość lub półprzezroczystość WS_EX_LAYERED Message-only [2000+]

Wykład 1-19 Okna potomne Ograniczone do obszaru klienta okna rodzica WS_CHILD Clipping - WS_CLIPCHILDREN, WS_CLIPSIBLINGS Rodzice wspólne przesuwanie, ukrywanie, niszczenie SetParent(), GetParent(), GetAncestor() EnumChildWindows(), IsChild() Komunikaty przesyłane bezpośrednio do okna potomnego gdy okno jest niedostępne - do rodzica z potomnych do rodzica - zawsze z identyfikatorem wysyłającego okna potomnego Styl WS_EX_LAYERED nie działa dla okien potomnych

Wykład 1-20 Powiązania między oknami Foreground, background foreground - aktualne robocze okno użytkownika GetForegroundWindow(), SetForegroundWindow() Z-order kolejność rysowania nakładających się okien WS_EX_TOPMOST BringWindowToTop(), SetWindowPos(), DeferWindowPos() GetTopWindow(), GetNextWindow() Owned zawsze powyżej posiadacza w hierarchi z-order automatycznie niszczone przy niszczeniu posiadacza ukrywane przy minimalizacji posiadacza CreateWindowEx(), GetWindow() z GW_OWNER

Wykład 1-21 Aktywność i dostępność okien Aktywność aktywne okno okno, na którym użytkownik pracuje (z tego samego wątku) SetActiveWindow(), GetActiveWindow(), SetWindowPlacement() WM_ACTIVETEAPP, WM_ACTIVATE Dostępność niedostępne okno nie otrzymuje informacji z klawiatury i myszy, otrzymuje od innych okien, aplikacji i systemu WS_DISABLED EnableWindow(), IsWindowEnabled() WM_ENABLE

Wykład 1-22 Widoczność i minimalizacja okien Widoczność niewidoczne okna nie są rysowane WS_VISIBLE IsWindowVisible(), ShowWindow(), SetWindowPos(), DeferWindowPos(), SetWindowPlacement(), SetWindowLong(), ShowOwnedPopups() WM_SHOWWINDOW Minimalizacja, maksymalizacja WS_MINIMIZE, WS_MAXIMIZE IsZoomed(), IsIconic(), GetWindowPlacement() CloseWindow(), ShowWindow(), SetWindowPlacement() WM_QUERYOPEN, WM_GETMINMAXINFO

Wykład 1-23 Rozmiar i pozycja okna Domyślne - CW_USEDEFAULT dla pozycji i/lub rozmiaru Polecenia systemowe - WM_SYSCOMMAND Funkcje: MoveWindow(), SetWindowPos(), SetWindowPlacement(), CascadeWindows(), TileWindows() GetWindowRect(), GetClientRect(), AdjustWindowRect() ScreenToClient(), ClientToScreen(), MapWindowPoints() WindowFromPoint(), ChildWindowFromPoint() Komunikaty: WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED WM_SIZE, WM_SIZING, WM_MOVE, WM_MOVING WM_NCCALCSIZE WM_GETMINMAXINFO

Wykład 1-24 Niszczenie okna Niszczenie okna przez system: ukrycie (jeśli było widoczne) usunięcie danych związanych z oknem unieważnienie uchwytu do okna Funkcja DestroyWindow(): 1. wysyła WM_DESTROY do okna 2. wysyła WM_DESTROY do wszystkich okien potomnych Komunikat WM_CLOSE: otrzymywany po naciśnięciu przycisku zamknięcia okna można zapytać użytkownika o potwierdzenie wywołać DestroyWindow(), żeby zniszczyć okno

Wykład 1-25 Wybrane style okna Typ: WS_CHILD, WS_OVERLAPPED, WS_POPUP, WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, WS_EX_MDICHILD Obwódka: WS_BORDER, WS_DLGFRAME, WS_THICKFRAME, WS_EX_CLIENTEDGE, WS_EX_WINDOWEDGE Składowe: WS_HSCROLL, WS_VSCROLL, WS_CAPTION, WS_MINIMIZEBOX, WS_MAXIMIZEBOX, WS_SYSMENU Inne cechy: WS_EX_ACCEPTFILES, WS_EX_CONTEXTHELP, WS_EX_LEFTSCROLLBAR

Wykład 1-26 Pozostałe cechy okna Klasa GetClassName(), GetClassInfo(), SetClassInfo() GetClassWord(), SetClassWord() Nazwa - na pasku tytułowym lub specyficznie dla okna GetWindowText(), SetWindowText(), GetWindowTextLength() Prywatne dane GetWindowLong(), SetWindowLong() z GWL_USERDATA Uchwyt - HWND FindWindow(), FindWindowEx() IsWindow()

Wykład 1-27 Schemat użycia okien 1. Rejestracja klasy RegisterClass(), RegisterClassEx() 2. Tworzenie CreateWindow(), CreateWindowEx() 3. Obsługa komunikatów WndProc() 4. Niszczenie DestroyWindow() WM_CLOSE, WM_DESTROY

Wykład 1-28 Pulpit Okno tworzone automatycznie przy starcie systemu Pokrywa cały ekran Tapeta Funkcje: GetDesktopWindow() SystemParametersInfo() SPI_GETDESKWALLPAPER, SPI_SETDESKWALLPAPER SPI_SETDESKPATTERN SPI_GETWORKAREA, SPI_SETWORKAREA

Czas Timer SetTimer(), KillTimer() WM_TIMER Pomiar czasu GetTickCount() GetSystemTimeAdjustment() Dokładny pomiar czasu (high-resolution timer) QueryPerformanceCounter() QueryPerformanceFrequency() Czas systemowy GetSystemTime(), SetSystemTime(), GetTimeFormat() Czas lokalny GetLocalTime(), SetLocalTime() Wykład 1-29

Wykład 1-30 Błędy systemowe Kod ostatniego błędu (last-error code) jedyna metoda sprawdzenia powodu wystąpienia błędu podczas wywołania ostatniej metody Win32 API GetLastError(), FormatMessage(), SetLastError() Sposoby powiadomienia użytkownika MessageBox() MB_ABORTRETRYIGNORE, MB_OK, MB_OKCANCEL, MB_RETRYCANCEL, MB_YESNO, MB_YESNOCANCEL MB_ICONEXCLAMATION, MB_ICONWARNING, MB_ICONCONFIRMATION, MB_ICONASTERISK, MB_ICONQUESTION, MB_ICONSTOP, MB_ICONERROR MessageBeep(), Beep() FlashWindow(), FlashWindowEx()