Podstawy programowania w języku C dla środowiska Windows



Podobne dokumenty
Programowanie na poziomie sprzętu. Programowanie w Windows API

IFiZR Laboratorium 5 Info

Podstawy programowania w języku C dla środowiska Windows

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

Komunikaty w Windows. Jarosław Kuchta

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Podstawy programowania w języku C++

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

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

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

Wprowadzenie do programowania w Windows

Formaty plików graficznych - wprowadzenie

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

Podstawy programowania w języku C++

Podstawy programowania w języku C i C++

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

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

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

Programowanie w języku C++

Microsoft Visual C++

Podstawy programowania w języku C++

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

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

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

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

UMOWY INSTRUKCJA STANOWISKOWA

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

Rysowanie punktów na powierzchni graficznej

3.4. Opis konfiguracji layoutów.

Podstawy programowania w języku C++

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

Podstawy programowania w języku C++

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

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

Programowanie w języku C++

Wprowadzenie do programowania w języku C

Podstawy programowania w języku C++

Instrukcja obsługi elektronicznego modułu reklamacyjnego aplikacji KAMSOFT wdrożenie rozwiązań w hurtowniach farmaceutycznych Grupy Neuca

E-geoportal Podręcznik użytkownika.

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Wymagania edukacyjne - Informatyka w klasie I

Podstawy programowania w języku C++

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Klawisze funkcyjne w OpenOffice.org Writer

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Instrukcja obsługi programu VisitBook Semieta Lite

DARMOWA PRZEGLĄDARKA MODELI IFC

imei CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Instytut Metrologii, Elektroniki i Informatyki

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

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

Obsługa programu Paint materiały szkoleniowe

Maskowanie i selekcja

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape

MODUŁ INTEGRUJĄCY ELEKTRONICZNEGO NADAWCĘ Z WF-MAG SPIS TREŚCI

Jak dodać własny szablon ramki w programie dibudka i dilustro

Przygotowanie własnej procedury... 3 Instrukcja msgbox wyświetlanie informacji w oknie... 6 Sposoby uruchamiania makra... 8

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Edytor tekstu OpenOffice Writer Podstawy

REJESTRACJA PROJEKTÓW

1. Opis okna podstawowego programu TPrezenter.

Jak przesłać mapę do urządzenia lub na kartę pamięci?

dokumentacja Edytor Bazy Zmiennych Edytor Bazy Zmiennych Podręcznik użytkownika

Język ludzki kod maszynowy

Architektura interfejsu użytkownika

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a Ustawienia wprowadzające. Auto CAD Aby uruchomić AutoCada 14 kliknij ikonę

PLAN WYNIKOWY KLASA 1

Minimalna wspierana wersja systemu Android to zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4.

Szybkie tworzenie grafiki w GcIde

Fragment tekstu zakończony twardym enterem, traktowany przez edytor tekstu jako jedna nierozerwalna całość.

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

Sprawdzanie pracy w JSA z poziomu systemu uczelnianego

Rozdział II. Praca z systemem operacyjnym

I. Interfejs użytkownika.

Compas 2026 Vision Instrukcja obsługi do wersji 1.07

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

Temat: Organizacja skoroszytów i arkuszy

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

Zastanawiałeś się może, dlaczego Twój współpracownik,

Część II Wyświetlanie obrazów

Cechy systemu Windows

Instrukcja obsługi integracji

Rejestracja faktury VAT. Instrukcja stanowiskowa

Nr: 15. Tytuł: Kancelaris w systemie Windows 8 i Windows 8.1. Data modyfikacji:

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Cel: Zastosowanie okien pytającychwyświetlających pytania i komunikaty (MessageBox). Klub IKS

Miejski System Zarządzania - Katowicka Infrastruktura Informacji Przestrzennej

Programowanie obiektowe

DIAGNOSTYKA DIAGNOSTYKA

Systemy ekspertowe Część siódma Realizacja dziedzinowego systemu ekspertowego Roman Simiński

Kolory elementów. Kolory elementów

Platforma e-learningowa

Wymiarowanie, kreskowanie, teksty

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

PROSTY PROGRAM DO MALOWANIA

Do wersji Warszawa,

Transkrypt:

Podstawy programowania w języku C dla środowiska Windows Część druga Windows API pierwsze kroki Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Obsługa wybranych komunikatów WM_CREATE LRESULT CALLBACK WndProc01( HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam ) switch( umsg) case WM_CREATE: MessageBox( NULL, "Uwaga - rodzi si ę okno", "Info", MB_OK ); case WM_CLOSE: DestroyWindow( hwnd ); case WM_DESTROY: PostQuitMessage( 0 ); Obsługa komunikatu generowanego w trakcie tworzenia okna default: return DefWindowProc( hwnd, umsg, wparam, lparam); return 0; Komunikat WM_CREATE jest wysyłany podczas wykonania CreateWindowEx lub CreateWindow. Procedura obsługi komunikatów nowego okna otrzymuje ten komunikat po utworzeniu okna ale przed jego wyświetleniem. Copyright Roman Simiński Strona : 2

Obsługa wybranych komunikatów WM_CREATE, przykład Centrowanie okna względem ekranu: newx = scrwidth / 2 ( right left + 1 ) / 2 = ( scrwidth ( right left + 1) ) / 2 newy = scrhight / 2 ( bottom top + 1 ) / 2 = ( scrwidth ( bottom top + 1 ) ) / 2 Copyright Roman Simiński Strona : 3

Obsługa wybranych komunikatów WM_CREATE, przykład Potrzebujemy: wysokości i szerokości ekranu, wysokości i szerokości okna, które można wyznaczyć na podstawie współrzędnych przeciwległych narożników prostokąta opisującego okno, funkcji pozwalającej na ustawienie okna na zadaj pozycji ekranowej, wywołanie tej funkcji umieścimy w obsłudze komunikatu WM_CREATE. Copyright Roman Simiński Strona : 4

Obsługa wybranych komunikatów WM_CREATE, przykład RECT rc; case WM_CREATE: Rekord opisu prostokątnego obszaru ekranowego typedef struct _RECT LONG left; LONG top; LONG right; LONG bottom; RECT, *PRECT; RECT określa współrzędne lewego górnego i prawego dolnego rogu prostokąta. Uwaga zgodnie z konwencją prostokąt opisuje zewnętrzny obrys obszaru, tzn. piksele opisujące narożniki nie wchodzą w skład rozważanego obszaru prostokątnego. Copyright Roman Simiński Strona : 5

Obsługa wybranych komunikatów WM_CREATE, przykład RECT rc; Pobranie informacji o położeniu okna hwnd do rekordu rc case WM_CREATE: GetWindowRect( hwnd, &rc ); BOOL GetWindowRect( HWND hwnd, LPRECT lprect ) pobiera rozmiary prostokąta w który jest wpisane okno identyfikowane pierwszym parametrem i zapisuje te informacje do rekordu opisu prostokąta, wskazywanego prze drugi parametr. Współrzędne są liczone w współrzędnych ekranowych odniesionych do lewego górnego narożnika ekranu.left corner of the screen. Copyright Roman Simiński Strona : 6

Obsługa wybranych komunikatów WM_CREATE, przykład RECT rc ; Ustalenie położenia okna centralnie względem ekranu case WM_CREATE: GetWindowRect( hwnd, &rc ); SetWindowPos( hwnd, 0, ( GetSystemMetrics( SM_CXSCREEN ) - ( rc.right - rc.left + 1 ) ) / 2, ( GetSystemMetrics( SM_CYSCREEN ) - ( rc.bottom - rc.top + 1 ) ) / 2, 0, 0, SWP_NOZORDER SWP_NOSIZE ); BOOL SetWindowPos( HWND hwnd, HWND hwndinsertafter, int X, int Y, int cx, int cy, UINT uflags); Zmienia pozycję, rozmiar oraz kolejność okna na osi Z. GetSystemMetrics pobiera określone informacje o rozmiarach i ustawieniach systemu liczone w pikselach. Parametry SM_CXSCREEN i SM_CYSCREEN pozwalają na pobranie szerokości i wysokości ekranu podstawowego wyświetlacza. Copyright Roman Simiński Strona : 7

Obsługa wybranych komunikatów WM_CREATE, przykład BOOL SetWindowPos( HWND hwnd, HWND hwndinsertafter, int X, int Y, int cx, int cy, UINT uflags ); hwnd identyfikator pozycjonowanego okna. hwndinsertafter identyfikator okna poprzedzającego na osi Z, lub HWND_BOTTOM, HWND_NOTOPMOST, HWND_TOP, HWND_TOPMOST, X, Y nowa pozycja x i y lewego górnego rogu, cx, cy nowa szerokość i wysokość okna liczona w pikselach, uflags Określa sposób zmiany rozmiaru i pozycjonowania okna, wiele możliwości np. kombinacja: SWP_NOSIZE SWP_NOZORDER zachowuje aktualną kolejność na osi Z i bieżacy rozmiar (parametry cx i cy są ignorowane). Copyright Roman Simiński Strona : 8

Obsługa wybranych komunikatów WM_CREATE, ładniejszy przykład void CenterWindow( HWND hwnd ) RECT rc ; GetWindowRect ( hwnd, &rc ) ; SetWindowPos( hwnd, 0, ( GetSystemMetrics( SM_CXSCREEN ) ( rc.right - rc.left + 1 ) ) / 2, ( GetSystemMetrics( SM_CYSCREEN ) ( rc.bottom - rc.top + 1 ) ) / 2, 0, 0, SWP_NOZORDER SWP_NOSIZE ); LRESULT CALLBACK WndProc01( HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam ) switch( umsg) case WM_CREATE: CenterWindow( hwnd ); Copyright Roman Simiński Strona : 9

Obsługa wybranych komunikatów WM_KEYDOWN case WM_KEYDOWN: Pobranie informacji o położeniu okna hwnd do rekordu rc WM_KEYDOWN ten komunikat jest wstawiany do kolejki gdy naciśnięto niesystemowy klawisza wirtualnego (bez Alt). Ten komunikat ma dwa parametry, wparam określa tzw. kod naciśniętego klawisza, lparam określa dodatkowe informacje związane z naciśniętym klawiszem. Klawisz wirtualny (ang. virtual-key) ma swój niezależny od platformy identyfikator (np. VK_ESCAPE, VK_SPACE, VK_PRIOR (PageUp), VK_NEXT (PageDown), VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_RETURN (Enter)). Copyright Roman Simiński Strona : 10

Jak zamknąć okno naciskając klawisz Escape? case WM_KEYDOWN: if( wparam == VK_ESCAPE ) Identyfikacja klawisza Copyright Roman Simiński Strona : 11

Jak zamknąć okno naciskając klawisz Escape? Spytaj czy kończymy case WM_KEYDOWN: if( wparam == VK_ESCAPE ) int ret = MessageBox( NULL, "Kończymy robot ę?", "Jedno pytanko", MB_OKCANCEL ); if ( ret == IDOK ) ; Copyright Roman Simiński Strona : 12

Jak zamknąć okno naciskając klawisz Escape? Wyślij komunikat WM_CLOSE case WM_KEYDOWN: if( wparam == VK_ESCAPE ) int ret = MessageBox( NULL, "Kończymy robot ę?", "Jedno pytanko", MB_OKCANCEL ); if ( ret == IDOK ) SendMessage( hwnd, WM_CLOSE, 0, 0 ); LRESULT SendMessage( HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam ); SendMessage funkcja wysyła komunkat określony paramtrami Msg i wparam, wparam do okna określonego hwnd. Funkcja wywołuje procedurę obsługi komunikatów okna i czeka na zakończenie jej wywołania (czyli aż obsłużony zostanie komunikat). Copyright Roman Simiński Strona : 13

Jak przechwycić klawisz Enter? case WM_KEYDOWN: if( wparam == VK_RETURN ) Identyfikacja klawisz Enter MessageBox( NULL, "Poco wciskasz ten Enter!", "Ostrzeżenie", MB_OK ); Copyright Roman Simiński Strona : 14

Rozpoznawania większej liczby klawiszy case WM_KEYDOWN: switch( wparam ) case VK_RETURN : MessageBox( NULL, "Poco wciskasz ten Enter!", "Ostrzeżenie", MB_OK ); case VK_ESCAPE : MessageBox( NULL, "Okno zamyka Alt-F4", "Ostrzeżenie", MB_OK ); case WM_CLOSE: DestroyWindow( hwnd ); Copyright Roman Simiński Strona : 15

Taki sobie dziwny przykład Pobranie identyfikatora aktualnie działającego modułu case WM_KEYDOWN: switch( wparam ) if( wparam == VK_SCROLL ) char szfilename[ MAX_PATH ]; HINSTANCE hinstance = GetModuleHandle( NULL ); GetModuleFileName( hinstance, szfilename, MAX_PATH ); MessageBox( hwnd, szfilename, "To program z pliku", MB_OK ); case WM_CLOSE: DestroyWindow( hwnd ); GetModuleHandle(NULL) te szczególny przypadek wywołania funkcji GetModuleHandle pozwala na pobranie identyfikatora własnego procesu. Copyright Roman Simiński Strona : 16

Taki sobie dziwny przykład Pobierz i wyświetl nazwę pliku, z którego został uruchomiony aktualnie działający kod case WM_KEYDOWN: switch( wparam ) if( wparam == VK_SCROLL ) char szfilename[ MAX_PATH ]; HINSTANCE hinstance = GetModuleHandle( NULL ); GetModuleFileName( hinstance, szfilename, MAX_PATH ); MessageBox( hwnd, szfilename, "To program z pliku", MB_OK ); case WM_CLOSE: DestroyWindow( hwnd ); GetModuleHandle(NULL) pobranie pełnej nazwy pliku zawierającego moduł określony pierwszym parametrem wywołania do tablicy identyfikowanej drugim parametrem (nie więcej znaków niż wskazuje ostatni parametr). Copyright Roman Simiński Strona : 17

Identyfikowanie komunikatów pochodzących od myszy case WM_LBUTTONDOWN: MessageBox( hwnd, "Lewy przycisk kliknięty", "", MB_OK MB_ICONINFORMATION); case WM_RBUTTONDOWN: MessageBox( hwnd, "Prawy przycisk kliknięty", "", MB_OK MB_ICONINFORMATION); case WM_CLOSE: DestroyWindow( hwnd ); Identyfikowanie naciśniętego klawisza myszy Copyright Roman Simiński Strona : 18

Identyfikacja pozycji wskaźnika myszy względem obszaru klienta POINTS p; char mess[ 128 ]; case WM_LBUTTONDOWN: Parametr lparam zawiera pozycje punktu centralnego wskaźnika myszy w trakcie zajścia zdarzenia. Młodszy bajt zawiera współrzędną x, starszy zawiera współrzędną y. p = MAKEPOINTS( lparam ); sprintf( mess, "Prawy przycisk naciśnięty na pozycji x = %d i y = %d", p.x, p.y ); MessageBox( hwnd, mess, "", MB_OK MB_ICONINFORMATION); case WM_CLOSE: DestroyWindow( hwnd ); Współrzędne zapisane w parametrze lparam wyrażone są w układzie współrzędnych obszaru klienta (0, 0) znajduje się w lewym górnym rogu obszaru klienckiego okna. Copyright Roman Simiński Strona : 19

Identyfikacja pozycji wskaźnika myszy względem obszaru klienta POINTS p; char mess[ 128 ]; case WM_LBUTTONDOWN: Makro MAKEPOINTS wydobywa ze parametru lparam współrzędne centralnego punktu wskaźnika myszy i tworzy rekord opisu punkty typu POINTS. p = MAKEPOINTS( lparam ); sprintf( mess, "Prawy przycisk naciśnięty na pozycji x = %d i y = %d", p.x, p.y ); MessageBox( hwnd, mess, "", MB_OK MB_ICONINFORMATION); case WM_CLOSE: DestroyWindow( hwnd ); Parametr wparam opisuje stan klawiszy Ctrl i Shift oraz pozostałych klawiszy myszy w trakcie zaistnienia zdarzenia to czasami jest istotne. Copyright Roman Simiński Strona : 20

Identyfikacja podwójnego kliknięcia POINTS p; char mess[ 128 ]; case WM_LBUTTONDBLCLK: Aby ten komunikat dotarł do procedury obsługi komunikatów, okno musi zostać zdefiniowane w wykorzystaniem stylu CS_DBLCLKS p = MAKEPOINTS( lparam ); sprintf( mess, "Prawy przycisk naciśnięty na pozycji x = %d i y = %d", p.x, p.y ); MessageBox( hwnd, mess, "", MB_OK MB_ICONINFORMATION); case WM_CLOSE: DestroyWindow( hwnd ); int. WINAPI.. WinMain( HINSTANCE hinst, HINSTANCE hprev, LPSTR lpszcmdline, int ncmdshow ). WNDCLASSEX.. winclass; HWND hwndmain; winclass.cbsize = sizeof( WNDCLASSEX ); winclass.cbclsextra = 0; winclass.style = CS_HREDRAW CS_VREDRAW CS_DBLCLKS ; Copyright Roman Simiński Strona : 21

Komunikat WM_PAINT informacje wprowadzające Operacje graficzne realizowane w ramach okna odbywają się z wykorzystaniem tzw. kontekstu urządzania graficznego (ang. device context), zwanego dalej DC. Intuicyjnie DC jest to narzędzie pozwalające na realizację operacji graficznych w ten sam sposób, niezależnie od płótna na jakim się to odbywa i niezależnie od specyficznych jego właściwości. Formalnie DC to struktura definiująca zbiór graficznych obiektów oraz związanych z nimi atrybutów obejmują one pióra do kreślenia linii, pędzle do malowania i wypełniania obszarów, mapy bitowe, palety kolorów, oraz inne elementy istotne elementy wykonywania operacji graficznych. Copyright Roman Simiński Strona : 22

Komunikat WM_PAINT informacje wprowadzające Wyróżnia się cztery typy DC: Display przeznaczony do realizacji operacji na ekranie. Printer przeznaczony do realizacji operacji na drukarce lub ploterze. Memory przeznaczony do realizacji operacji na mapach bitowych. Information przeznaczony do pobierania informacji o danych DC. Przy okazji dwa istotne pojęcia: obszar obcinania (ang. clipping region) wszystkie operacje wykonywane przez aktualnie stosowany obiekt graficzny realizowane są tylko w ustalonym obszarze obcinania. obszar aktualizacji (ang. update region) obszar określający tę część okna, która wymaga aktualizacji. Jeżeli system wykryje konieczność aktualizacji przynajmniej części okna, ustali odpowiedni obszar aktualizacji w wyśle komunikat WM_PAINT. Copyright Roman Simiński Strona : 23

Komunikat WM_PAINT informacje wprowadzające Kontekst wyświetlacza DDC (ang. display device contexts) Program otrzymuje kontekst DDC poprzez wywołanie funkcji BeginPaint, GetDC lub GetDCEx. Zwykle wykorzystuje się otrzymany DDC do wykonywania operacji graficznych w obszarze klienckim okna. Po zakończeniu operacji graficznych należy wywołać funkcje EndPaint or ReleaseDC. Copyright Roman Simiński Strona : 24

Komunikat WM_PAINT pobieranie kontekstu wyświetlacza Funkcja BeginPaint jest dedykowana dla realizacji operacji graficznych podczas obsługi komunikatu WM_PAINT. Funkcja BeginPaint ustala obszar obcinania na taki jak obszar aktualizacji. Każda operacja graficzna wykonana po BeginPaint będzie od razu widoczna na ekranie. Funkcja BeginPaint wysyła komunikat WM_ERASEBKGND, który spowoduje wyczyszczenie obszaru klienckiego przy użyciu pędzla określonego w zarejestrowanej klasie okna. Funkcja BeginPaint wypełnia danymi rekord PAINTSTRUCT, jej rezulataem jest identyfikator DDC lub NULL gdy nie jest on dostępny. Po zakończeniu operacji graficznych należy koniecznie wywołać funkcje EndPaint. Copyright Roman Simiński Strona : 25

Komunikat WM_PAINT wywołanie BeginPaint PAINTSTRUCT ps; HDC hdc; case WM_PAINT: hdc = BeginPaint( hwnd, &ps ); TextOut( hdc, 0, 0, "Dzie ń dobry", 11 ); EndPaint( hwnd, &ps ); Definicja rekordu PAINTSTRUCT zawiera on informacje wykorzystywane do rysowania w obszarze klienckim okna aplikacji. HDC identyfikator DDC Copyright Roman Simiński Strona : 26

Komunikat WM_PAINT wywołanie BeginPaint PAINTSTRUCT ps; HDC hdc; case WM_PAINT: hdc = BeginPaint( hwnd, &ps ); TextOut( hdc, 0, 0, "Dzie ń dobry", 11 ); EndPaint( hwnd, &ps ); Pobranie kontekstu urządzenia zapamiętanie w hdc i wstawienie informacji do rekordu ps Copyright Roman Simiński Strona : 27

Komunikat WM_PAINT wywołanie TextOut PAINTSTRUCT ps; HDC hdc; case WM_PAINT: hdc = BeginPaint( hwnd, &ps ); TextOut( hdc, 0, 0, "Dzie ń dobry", 11 ); EndPaint( hwnd, &ps ); Wykonanie przykładowej operacji graficznej narysowanie na hdc, na pozycji x = 0 oraz y = 0, tekstu Dzień dobry, liczącego 11 znaków. OutText wykorzystuje font, kolor pierwszego planu i tła ustawiony dla wykorzystywanego kontekstu identyfikowanego przez parametr hdc. Copyright Roman Simiński Strona : 28

Komunikat WM_PAINT wywołanie EndPaint PAINTSTRUCT ps; HDC hdc; case WM_PAINT: hdc = BeginPaint( hwnd, &ps ); TextOut( hdc, 0, 0, "Dzie ń dobry", 11 ); EndPaint( hwnd, &ps ); Funkcja EndPaint sygnalizuje, że operacja rysowania w oknie identyfikowanym przez hwnd została zakończona. Copyright Roman Simiński Strona : 29