Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Findwindow.
Getwindow.
GetwindowText.
SetWindowText.
Iswindow.
Movewindow.
Iswindowvisible.
Umeblować.
Iswindowenabled.
Oknofrompol.
Pokaż okno.
Zamknij okno.
Setwindowpos.
GetClasslong.
Setclasslong.
Getwinllong.
SetWindowlong.
Getdesktopwindow.
Gabinet.

Funkcja FindWindow.

funkcja FindWindow (nazwa klasy, Rowowny: PCHAR): HWND;
Funkcja zwraca deskryptor okna, który spełnia zapytanie (0, jeśli to okno nie zostało znalezione).

Nazwa klasy. Nazwa klasy, dla której wyszukiwanie jest wykonane wśród wszystkich okien systemu. Giwowname. Tytuł okna

Jeden z parametrów może być równy z NIL, wówczas wyszukiwanie jest przeprowadzane na innym parametrze.
Przykład:

Funkcja GetWindow

funkcja GetWindow (WND: HWND; param): HWND
Funkcja zwraca żądanie satysfakcjonujące deskryptor okna.

WND. Deskryptor dowolnego początkowego okna Paraport Bierze jedną z następujących stałych wartości: gw_owner. Zwraca deskryptor okna przodków (0 - jeśli nie ma przodków). gwwndfirst. Zwraca deskryptor pierwszego okna (w stosunku do WND). gw_hwndnext. Zwraca deskryptor następnego okna (okna są przesuwane bez powtórzeń, tj. Jeśli nie zmieniłeś funkcji WND parametru, opisy nie są ponownie zwracane) gw_child. Zwraca deskryptor pierwszej córki.

Przykład:

Funkcja GetWindowText.

funkcja GetWindowText (HWND: HWND; LPSTRING: PCHAR; NMAXCOUNT: Integer): Integer;
Funkcja zwraca tekst okna. W przypadku formularza będzie tytuł, dla przycisku - napis na przycisku.

hwnd. Deskryptor tego okna, którego tekst musisz zdobyć. lpstring. Zmienna, w której wynik zostanie umieszczony nmaxCount.

Maksymalna długość tekstu, jeśli tekst jest dłuższy, to jest obcięty.


Przykład:

Funkcja ISWindow.

funkcja ISWindow (HWND: HWND): Bool; Zwraca true, jeśli okno z danym deskryptorem istnieje i false inaczej.

Hwnd. Opisz żądanego okna

Funkcja Movewindow.

MOVEWINDOW (HWND: HWND; X, Y, NWIDTH, NHEIGHT: Integer; Bredaint: Bool): Bool; Przesuwa okno do nowej pozycji.

hwnd. Deskryptor ruchomych okna. X, Y, NIPDTH, NHEIGHT W związku z tym: Nowy współrzędne x, y; Nowa szerokość, wysokość. bredaint. Wartość boolowska pokazująca, czy okno jest ponownie przerywane.

Funkcja IsWindowvisible.

funkcja IsWindowvisible (HWND: HWND): Bool;
Zwraca true, jeśli to okno jest najwyraźniej.

hwnd. Deskryptor okna.

Funkcja EnableWindow.

funkcja AnuleWindow (HWND: HWND; Prawidłowy: Bool): Bool;
Ustawia dostępność okna (okno nie jest dostępne, jeśli nie odpowiada na zdarzenia myszy, klawiatury itp.). Analogowy w Właściwość komponentu Delphi włączona. Włączyć Włączyć PRAWDA, jeśli wszystko przekazało pomyślnie, a fałsz jest skonstruowany.

hwnd. Deskryptor okna. dobrodzony Wartość boolowska, która definiuje dostępność okna.


Przykład:

Funkcja Iswindowenabled.

funkcja Iswindowenabled (HWND: HWND): Bool;
Zwraca określone okno: True, jeśli okno jest dostępne i false inaczej.

hwnd. Deskryptor okna.

Funkcja WindowFrompoint.

Windowfrompoint (punkt: TOint): HWND;
Zwraca deskryptor okna znajdujący się na tym ekranie.

Punkt Rodzaj współrzędnej punktu ekranu TOint.(Jak definicja typu poniżej)

Funkcjonować

rodzaj TOint \u003d. Rekord. X: Longint; Y: Longint; koniec.;

Funkcja ShowWindow.

funkcja ShowWindow (HWND: HWND; NCMDShow: Integer): Bool; Pokazuje lub ukrywa okno.

hwnd. Opisz żądanego okna ncmdshow. Stała, definiowanie tego, co zostanie wykonane przy oknie: Sw_hide. Sw_shownormal.Sw_normal. Sw_showminimized. Sw_showmenized. Sw_magize. Sw_shownoactivate. Sw_show. Sw_minimiz. Sw_showminnoaktywne Sw_showna. Sw_restore. Sw_showdefault. Sw_max.


Przykład:

Funkcja CloseWindow.

funkcja Closewindow (HWND: HWND): Bool; stdcall;
Zamyka okno.

hwnd. Opisz zamknięte okno.

Setwindowpos.

funkcja SetWindowPos (HWND: HWND; HWNDINSERSERTERFTER: HWND; X, Y, CX, CY: Integer; Uflags: Uint): Bool; stdcall;
Ustawia okno do nowej pozycji

hwnd. Okno UPLANTING. hwndinserterfter. Deskryptor okna, przed którym na liście Z-rzędu. Zostanie włożone okno hwnd.lub jeden z następujących stałych: Hwnd_bottom. Umieść okno na dole listy zamówienia Z Hwnd_top. Umieść okno na górze listy zamówienia Z X, y, cx, c

W związku z tym nowy horyzont. , Vert. pozycje okna ( X, y.), a także nowa szerokość
i wysokość ( cX, CY.)

uflags. Jeden lub więcej (podzielony Lub.) Następujące stałych: Swp_nosize. Nie zmieniaj rozmiaru okna po przeprowadzce ( cX, CY. ignorować) Swp_nozorder. Nie zmieniaj pozycji okna na liście zamówienia Z Z Swp_showwindow. Zrobić okno widoczne po przeprowadzce Swp_hidewindow. Ukryj okno po przeniesieniu SWP_NOActivate. Nie przekazuj okna ostrości po przeprowadzce SWP_NOMOVE. Nie ruszaj okna (ignorowany X, y.)

Funkcja GetClassLong.

funkcja GetClassLong (HWND: HWND; Nindex: Integer): Integer;
Ta funkcja zwraca 32-bitową liczbę całkowitą, pobrane z określonego pola wprowadzania. TWNDCLASSEX. Określone okno.

hwnd. Opisz okno nindex. Stała, definiowanie tego, co zostanie zwrócone. Musi być jeden z następujących: Gcl_menuname. Zwraca wskaźnik do łańcucha zawierającego nazwę menu klasy zdefiniowanej w pliku zasobów związanego z niektórym programem. Gcl_hbrbackgroud. Zwraca deskryptor (HBrush) tła tła związanego z klasą Gcl_hcoursor. Zwraca deskryptor (HCursor) kursora, ukształtowany z klasą Gcl_hicon. Zwraca deskryptor (Hicon) piktogramu związanego z klasą Gcl_hmodule. Zwraca deskryptor procesu (Hmodule), zarejestrowaną klasę. Gcl_cbwndextra. Zwraca rozmiar pamięci (w bajtach) wybrany do przechowywania dodatkowych danych tego okna. Opis Jak korzystać z tej pamięci, spójrz w opis funkcji Gcl_cbclsextra. Zwraca rozmiar pamięci (w bajtach) wybranej do przechowywania danych klasowych dodatkowych Gcl_wndproc. Zwraca adres procedury okna związanego z klasą. Gcl_style. Zwraca styl stylu (obecność jednego lub innego stylu jest sprawdzana przez pobitej operacji I. za pomocą stałych typów cs_xxx.) Gcl_hiconsm.

Uwaga: W przypadku, gdy funkcja zwraca wskaźnik, musisz przynieść typy (liczba całkowita -\u003e

Funkcja SetClassLong.

funkcja SetClassLong (HWND: HWND; Nindex: Integer; Dwnewlong: Longint): Integer; Funkcja funkcji. Ustawia odpowiednią wartość w żądanym polu.
Funkcja zwraca wartość starej pola, dzięki czemu można go następnie skorygować lub wrócić do zera, jeśli coś poszło nie tak, jak powinno.

hwnd. Opisz okno nindex. Jedna ze stałych Gcl_xxx. Z funkcji. W zależności od wartości tego pola żądane pole zostanie zmienione.

Uwaga Wskaźnik. Pisać Liczba całkowita.

Funkcja GetWindowlong

funkcja GetWindowlong (HWND: HWND; Nindex: Integer): Longint; Zwraca informacje o niektórych okna w postaci 32-bitowego całkowitego.

hwnd. Opisz okno nindex. Stała definiowanie tego, co zostanie zwrócone. Musi być jeden z ich następujących:
Gwl_wndproc. Zwraca adres procedury okna związanego z tym oknem. Adres otrzymany (po odpowiednich typach typów) można stosować w funkcji. Callwindowproc.. Ta wartość Zwykle używaj, jeśli chcą wymienić istniejące procedurę okna na własną rękę, a nie utraty okien, zazwyczaj używają Callwindowproc.. Gwl_hinstance. Zwraca deskryptor aplikacji określony podczas tworzenia funkcji okna CreateWindowex.. Gwl_hwndparent. Zwraca deskryptor (HWND) okna macierzystego Gwl_style. Zwraca styl okna. Wartości Concrcut Style są rozpoznawane za pomocą utartej pracy I. i stała WS_XXX. Gwl_exstyle. Zwraca zaawansowany styl okna. Wartości Concrcut Style są rozpoznawane za pomocą utartej pracy I. i stała WS_EX_XXX. Gwl_userdata. Zwraca 32-bitową liczbę całkowitą powiązaną z oknem (jest to ostatni parametr w CreateWindow lub CreateWindowex) Gwl_id. Zwraca identyfikator okna (nie ma nic wspólnego z deskryptorem okna!) Ustaw parametr HMENU dla okien dla dzieci podczas dzwonienia CreateWindow lub CreateWindowex

Uwaga: W przypadku, gdy funkcja zwraca wskaźnik, musisz przynieść typy (liczba całkowita -\u003e wskaźnik). Możesz to zrobić w ten sposób:

Funkcja SetWindowlong.

funkcja SetWindowlong (HWND: HWND; Nindex: Integer; Dwnewlong: Longint): Longint;
Para do funkcji. Zmienia atrybuty określonego okna.
Funkcja zwraca starą wartość nieruchomości, jeśli połączenie przekazywane pomyślnie lub zero inaczej.

hwnd. Opisz okno nindex. Stała definiowanie, którą właściwość zostanie zmieniona. Musi być jedną ze stałych Gwl_xxx. Z opisu funkcji dwnewlong. Nowa wartość nieruchomości określona przez stałą nindex.

Uwaga: Podczas instalowania pól polowych należy przynieść typ Wskaźnik. Pisać Liczba całkowita.

Funkcja GetDesktopwindow

funkcja GetDesktopwindow: HWND
Funkcja zwraca deskryptor okna Desktop (Desktop). Bez parametrów.

Gabinet.

funkcja GetParent (HWND: HWND): HWND;
Zwraca faworyt okna nadrzędnego na okno hwnd..

hwnd. Opisz okno

Dzięki WinAPI możesz tworzyć różne procedury okien, okna dialogowe, programy, a nawet gry. To, powiedzmy, biblioteka jest podstawowym programowaniem, MFC, ponieważ te interfejsy są dodatkami tej biblioteki. Opanowałem go, łatwo tworzysz formularze i zrozumiemy, jak to się dzieje.

Nie zostanie wprowadzony do teoretyki. Zacznijmy od tego, jak stworzyć ten projekt w MVS, a na końcu artykułu będzie prosty przykład.

Więc. Pierwszy otwarty Visual Studio.Następnie kliknij kartę Plik, a następnie "Utwórz projekt":

Następnie na liście rozwijanej Visual C ++ wybierz Win32, będzie "projekt Win32". Kliknij na to:
Wprowadzamy nazwę projektu, określ ścieżkę i kliknij "OK". Następnie zostanie napisany: "Witamy w kreatorze aplikacji Win32". Kliknij Następny. Domyślnie napis "pusty projekt" nie jest dostępny. Musimy go umieścić i upewnić się, że mamy aplikację "Typ aplikacji". Jeśli wszystko jest prawdziwe, kliknij - "Zakończ".

Musimy mieć pusty projekt tego typu:

Cóż, zacznijmy pisać prosty program.który tradycyjnie wyświetli napis: "Cześć, pokój !!!".

Oczywiście musisz dodać plik typu "Nazwa" .CPP do projektu. Kliknij "Pliki kodu źródłowego" kliknij prawym przyciskiem myszy Myszy, na liście rozwijanej wybierz kartę - "Dodaj", a następnie "Utwórz przedmiot ...". W rezultacie pojawi się to okno:

Wybierz plik "C ++", wprowadź nazwę, kliknij "Dodaj". Następnie otwórz ten plik i włóż taki kod do niego (szczegóły poniżej):

#Zawierać. // Plik nagłówka zawierający funkcje API // funkcja główna - analogowy INT Główny () W aplikacji Konsoli: Int Winapi WinMain (Hinstance Hinstalance, // Deskryptor Instancji aplikacji HipvinStance Hinstance HPrevinstance, // w Win32 nie jest używany LPSTR LPCMDline, // Potrzeba uruchomienia w trybie wiersza poleceń Int ncmdshow) // tryb wyświetlania okna (// funkcja wyjścia okna z przyciskiem "OK" na ekranie (o parametrach później) MessageBox (Null, L Witaj, World !!! " , L "Procedura okna", MB_OK); Powrót NULL; // Zwróć wartość funkcji)

Rezultat powinien być taki:

Teraz zatrzymajmy się bardziej szczegółowo w kodzie programu.

W pierwszej linii podłączamy plik Header Windows.h. Zawiera wszystkie niezbędne funkcje "apish". Wszystko jest tutaj jasne.

W 4-7 wierszy Posiadamy opis funkcji Winpi Winmain ().

Kwalifikator WinAPI jest potrzebny do funkcji Winmain. Pamiętaj o tym. Winmain - Nazwa funkcji. Ma cztery parametry. Pierwszy jest Hinstance Hinstanance ( wiersz 4.). Hinstance to deskryptor instancji okna (jest to określony kod procedury okna, identyfikator, na którym OS odróżnia go z innych okien). Dzięki nim możesz odnieść się do okna w procesie pracy w innych funkcjach (o tym później), coś do zmiany w parametrach okna. Hinstance jest jednym z wielu typów danych zdefiniowanych w WinAPI, tak samo jak int, na przykład. A nagrywanie Hinstance Hinstance Mówi, że tworzymy zmienną nową zmienną typu Hinstance z nazwą Hinstance.

Porozmawiamy o typach danych później, więc przejdziemy do następnego parametru: Hinstance HPrevinstance ( wiersz 5.). Jaka jest napisana w komentarzach, nie jest używana w Win32, ponieważ jest tworzony dla 3.x System wylotowy, jest jasne z poprzedniego, że jest to deskryptor instancji okna. Następnie mamy zmienną typ LPSTR ( wiersz 6.) Z nazwą LPCMDLine. Jest używany, jeśli uruchomimy okno wiersz poleceń Z kluczowymi parametrami. Bardzo egzotyczny sposób, więc nie pozostaniemy na nim.

A ostatni parametr: Integer, definiuje sposób wyświetlania okna. Potrzeba funkcji ShowWindow, która zostanie opisana później. Na przykład, z nim możemy wdrożyć okno na cały ekran, uczynić go pewną wysokością, przezroczystą lub na szczycie reszty.

Przejdź do funkcji MessageBox () ( wiersz 10.). Posiada cztery parametry i jest potrzebne do wyjścia komunikatów o błędach. W takim przypadku użyliśmy go do wyświetlania wiadomości. Ogólnie rzecz biorąc, opis funkcji jest następujący:

Int MessageBox (HWND HWND, // Deskryptor Dominujące okno LPCTSTR LPTEXT, // wskaźnik do łańcucha z LPCTSTR LPCaption, // wskaźnik na łańcuchu z tekstem Uint Utype Header); // flagi do wyświetlania przycisków, stylu piktogramu i inne

W naszym przypadku pierwszy parametr jest przypisany zero. Wszystko, ponieważ nie mamy okien rodzicielskich (nie jest uruchomiony przez jakiś program).

Następnie mamy dwie zmienne, takie jak LPCTSTR: LPTEXT i LPCaption. Pierwsze zgłasza informacje, które zostaną wyświetlone w oknie w formularzu tekstowym. Drugie raporty, które zostaną zapisane w tekście nagłówka do okna. Jest to analogowy znak * str, ale wciąż nie. Aby tekst był prawidłowo wyświetlany, musisz umieścić literę L przed ciągiem ( Unicode. linia).

Cóż, ostatni typ danych - UINT - 32-bitowy nie jest nienaruszony bez znaku. To znaczy analogowy niepodpisany int. Ten parametr można przesyłać niektóre wartości (o nich później), dzięki czemu można zmienić typ przycisku. W naszym przypadku jest to MB_OK - oznacza, że \u200b\u200bokno tworzy przycisk za pomocą napisu "OK" i odpowiednie działanie po naciśnięciu (zamykanie aplikacji).

W rząd 11.zwracamy wartość funkcji, ponieważ nie ma nieważności.

Tak więc ogólna idea WinAPI jest teraz. Kontynuowano w następujących sekcjach.

W końcu! W końcu! Dziś zaczniemy tworzyć pełnoprawne okno Windows. Do widzenia nieszczęsna konsola !!!

W tym momencie należy już wiedzieć, jak poznać składnię C ++, być w stanie pracować z rozgałęzionymi i cyklami, dobrze zrozumieć funkcjonowanie funkcji. Jeśli poradzisz sobie z walką morską, możesz założyć, że wszyscy się tego nauczyłeś.

Węgierski formularz nagrania

Cały kod, którego spotkamy w WinAPi napisany jest w węgierskim mundurze. Jest to taka zgoda na kod pisania.

Jednocześnie wstępna litera typu jest zainstalowana przed nazwą zmiennej. Wszystkie słowa w nazwach zmiennych i funkcji zaczynają się od wielkiej litery.

Oto kilka prefiksów:

b - Variable typ Bool.
L - Length Long Instalacja całkowita.
W - Z Word (Word) - 16 bitów. Zmienna typu Niepodpisany krótki.
DW - z podwójnego słowa (podwójne słowo) - 32 bitów. Rodzaj zmiennej niepodpisanej długości.
SZ - String zakończony zero (ciąg zakończony zero). Tylko zwykły ciąg, który nieustannie używamy.
P lub LP - wskaźnik (od wskaźnika). LP (z długiego wskaźnika) - te wskazówki przełączane z przeszłości. Teraz LP i P oznacza to samo.
H jest deskryptorem (z uchwytu).

Na przykład wskaźnik zostanie nazwany w ten sposób:

void * pdata;

Ta forma nagrywania jest używana przez Microsoft. Wielu krytyku wykonuje tę metodę zmiennych nazewnictwa. Ale takie rzeczy (umowy kodujące) w dużych firmach są niezbędne.

Pozwól mi przypomnieć, że identyfikatory stałych zazwyczaj składają się tylko z wielkich liter: WM_Destroy. WM_Destoy wynosi 2, stała jest zdefiniowana przez zdefiniowanie.

Ponadto WinAPI wykorzystuje wiele redefiniowanych typów. Tutaj na tej stronie - http://msdn.microsoft.com/en-us/library/aa383751(vs.85).aspx, znajdziesz opisy wszystkich typów okien (w języku angielskim).

I jeszcze jedna rzecz, której nie zdemontowaliśmy. Wskaźniki są często przypisane wartość null.. Zastanów się, że jest to po prostu 0, a wskaźniki przypisane do null (zero), nie wskazują żadnej części.

Windows API (WinAPI)

Wszystkie programy Windows używają specjalnego interfejsu programowania WinAPI. Jest to zestaw funkcji i struktur w języku C, dzięki czemu program jest kompatybilny z oknami.

Windows API ma ogromne możliwości systemu operacyjnego. Możesz nawet powiedzieć - nieograniczony.

Nie uwzględnimy jeszcze jednego procentu wszystkich funkcji WinAPI. Początkowo chciałem wziąć więcej materiałów, ale zajęłoby to zbyt wiele czasu, a wina w WinAPi bagno, przed DirectXem "i dostaniemy się za kilka lat. Opis Winapi zajmie dwie lekcje (w tym ten jeden). Będziemy Rozważ tylko ramę aplikacji pod Windows.

Program w systemie Windows jest dokładnie taki sam jak program DS główna funkcja. Tutaj ta funkcja nazywa się Winmain.

Funkcja Winmain.

Program w systemie Windows składa się z następujących części (wszystko to dzieje się wewnątrz Winmain):

Utwórz i zarejestruj klasę okna. Nie mylić klas C ++. WinAPi jest napisany w C, nie ma zajęć w zwykłym zrozumieniu tego słowa.
Tworzenie okna programu.
Główny cykl, w którym przetwarzane są wiadomości.
Przetwarzanie komunikatów programu w procedurze okna. Procedura okna jest konwencjonalną funkcją.
Te cztery przedmioty są podstawą programu Windows. Podczas tego i kolejnej lekcji przeanalizujemy wszystko szczegółowo. Jeśli jesteś zdezorientowany w opisie programu, wróć do tych przedmiotów.

Teraz szczegółowo przeanalizujemy to szczegółowo:

WinAPI: struktura WNDClass

Przede wszystkim musisz stworzyć i wypełnić zmienną strukturalną WNDClass, a następnie na podstawie go zarejestrowania klasy okna.

Oto, jak wygląda ta struktura:

kod w C ++ typedef struct (styl uint; // wndproc lpfnwndproc Styl okna; // wskaźnik do procedury okna INT CBClsextra; // Dodatkowe bajty po klasie. Zawsze umieszczaj 0 int CBWndextra; // dodatkowe bajty po instancji okna. Zawsze umieszczaj 0 Hinstance Hinstance; / / instancja aplikacji , * Pwndclass;

Struktura WNDClass w WinAPI określa podstawowe właściwości utworzone okna: Ikony, widok kursora myszy, czy okno jest menu, która aplikacja będzie należeć do okna ...

Po wypełnieniu tej konstrukcji możesz zarejestrować klasę okna na nim. Nie mówimy o takich zajęć jak w C ++. Raczej możemy założyć, że klasa okna jest takim szablonem, zarejestrowałeś go w systemie, a teraz na podstawie tego szablonu możesz utworzyć kilka okien. A wszystkie te okna będą miały właściwości określone w zmiennej strukturalnej WNDClass.

WinAPi: Createwindow Funkcja

Po rejestracji klasy okna opiera się na oknie głównym aplikacji (teraz rozpoczęliśmy drugi przedmiot). Odbywa się to za pomocą funkcji CreateWindow. Posiada następujący prototyp:

kod w C ++ Hwnd Createwindow (LPCTSTR LPClassName, // Nazwa LPCTSTR LPWINDOWNAME Nazwa klasy, // Nazwa okna (wyświetlana w nagłówku) DWORD DWJYLE, // Styl Int X, // Koordynowanie poziome z lewej krawędzi ekranu INT Y, // współrzędna pionowa Górna krawędź ekranu INT NIWIDth, // szerokość okna INT NHEIGHT, // wysokość okna HWND HWNDParent, // okno macierzystego HMenu HMENU, // Deskryptor Hinstalance Hinstalance Menu, // Instancja aplikacji LPPARAM LPPARAM \\ t // parametr; zawsze umieść null);

Jeśli podstawowe właściwości okna są ustawione w klasie okna (struktura WNDClass), tutaj są bardziej szczegółowe dla każdego okna: rozmiar okna, współrzędne ...

Ta funkcja zwraca deskryptor okna. Korzystając z deskryptora, możesz uzyskać dostęp do okna, jest w przybliżeniu jako identyfikator.

Należy pamiętać, że istnieje wiele nowych typów. W rzeczywistości wszystkie są stare, po prostu przedefiniowane. Na przykład: HWND jest przedefiniowaniem rodzaju uchwytu, co z kolei jest przedefiniowaniem Pvoid, który z kolei jest nadpisany void *. Jak głęboko zakopano prawdę! Ale nadal typ HWND jest wskaźnikiem nieważności.

Okno składa się z kilku części. W prawie każdym programie zobaczysz: Tytuł okna, menu System (jeśli klikniesz na ikonę aplikacji w lewym górnym oknie), trzy przyciski systemowe do pracy z oknem: Zwiń, wdrażaj na pełnym ekranie i zamknij. Ponadto prawie zawsze w aplikacji jest menu. To tylko ostatnie, że na pewno nie będziemy. I oczywiście większość okna zajmuje tak zwane. Obszar klienta, w którym użytkownik jest zwykle i działa.

Dotyczy reżimu okna. Przez długi czas będziemy ćwiczyć z DiECTX w oknie - nie użyjemy trybu pełnoekranowego.

Przetwarzanie wiadomości (obsługa wiadomości)

Główną różnicą wszystkich naszych poprzednich programów z programów Windows jest przetwarzanie wiadomości.

Na przykład, gdy użytkownik naciska jakiś klawisz na klawiaturze generowany jest komunikat, że klawisz został naciśnięty. Następnie ta wiadomość wchodzi do aplikacji, która była aktywna, gdy użytkownik nacisnął klawisz.

Tutaj mieliśmy zdarzenie (zdarzenie) - naciśnięty klawisz.

Zdarzenie może być: przesuń kursor myszy, zmieniając ostrość aplikacji, naciskając klawisz klawiaturowy, zamykając okno. Jest wiele wydarzeń. Wysoko! W ciągu sekundy mogą wystąpić dziesiątki zdarzeń w systemie operacyjnym.

Tak więc, gdy wystąpi Everight, system operacyjny tworzy komunikat: taki klawisz został naciśnięty, współrzędne kursora myszy zmieniono, otworzy się nowe okno.

Wiadomości mogą tworzyć zarówno system operacyjny, jak i różne aplikacje.

Wiadomość jest strukturą i wygląda tak:

kod w C ++ Typedef Cold Tagmsg (HWND HWND; // okno, które otrzyma tę wiadomość Uint Message; // Kod wiadomości WPARAM WPARAM; // LPARAM LPARAM parametr; // Parametr DWORD Czas; // Czas Po punkcie PT Message Happens // Koordynuje mysz kursor) MSG;

Należy pamiętać, w jaki sposób struktury są przedefiniowane za pomocą typedef.

Stworzyć ta struktura Możesz użyć następującego kodu:

kod w C ++ msg.messgae \u003d\u003d 2; // Te dwie linie są równoważne, ponieważ msg.message \u003d\u003d Wm_Destroy; // wm_destroy stała jest równa dwóm

Tutaj pole zawierające kod wiadomości (nazwa wiadomości jest porównywana z stałą WM_DESTRY. WM - z komunikatu Windows (komunikat Windows). WM_Destroy to komunikat generowany, gdy okno jest zamknięte (niszczyć - zniszczenie).

Kody wiadomości są definiowane za pomocą stałych i mają prefiks WM_: WM_Close, WM_Create itp.

Struktura MSG napotyka typ HWND - z uchwytu okna (deskryptor okna lub deskryptora okna). To jest coś, co "opisuje" okno. To jest coś takiego jak identyfikator (nazwa okna).

Pamiętaj o tym słowa - uchwyt (deskryptor, deskryptor). W systemie Windows ta koncepcja jest używana bardzo często. Prawie wszystkie typy okien, które zaczynają się od H - deskryptorów: deskryptor ikony, deskryptor czcionek, opis instancji aplikacji. Są trzydzieści, o ile pamiętam.

Wszystkie interakcje między aplikacjami systemu Windows są przeprowadzane przy użyciu tych najbardziej pożądanych okien (HWND).

Jest inny ważny deskryptor - deskryptor aplikacji (Hinstance - pierwszy parametr Winmain) jest unikalnym identyfikatorem aplikacji, dzięki czemu system operacyjny nie może pomylić dwóch różnych programów. Jest w przybliżeniu jak kod kreskowy. Spojrzymy na to później.

Za każdym razem, gdy użytkownik dokonuje pewnych działań, tworzony jest komunikat: określony jest deskryptor okna, który należy uzyskać tę wiadomość, określono identyfikator komunikatu, parametry są wypełnione, czas (prąd) jest wypełniony i współrzędne i współrzędne Kursor myszy są wypełnione (patrz strukturę).

Następnie ten komunikat jest umieszczony w kolejce wiadomości. system operacyjny. Gdy kolejka zostanie osiągnięta do naszej wiadomości, jest wysyłana przez żądane okno (Windows wie, które okno, aby wysłać każdą wiadomość za pomocą deskryptorów). Gdy wiadomość przybywa do aplikacji, jest umieszczony w kolejce wiadomości wiadomości. Jak tylko się do tego przychodzi, jest przetwarzany.

Tymczasem wygląd, gdy użytkownik dokonał jakichkolwiek działań (wystąpiło zdarzenie, a wiadomość została wygenerowana) i moment, w którym program zareagował na tę akcję (wiadomość została przetworzona przez program) Jest wiele zdarzeń. W końcu zarówno w kolejce komunikatu Windows, jak i w kolejce wiadomości aplikacji może być dużo wiadomości. W pierwszym przypadku możemy rozmawiać o setkach, w drugim przypadku przynajmniej kilku.

Procedura okna (procedura okna - WNDPROC)

Kontynuujemy od chwili, gdy wiadomość trafiła do kolejki wiadomości wiadomości. Jak tylko dotarł, jest przetwarzany. Aby obsługiwać wiadomości, każdy program powinien istnieć specjalna funkcja - procedura okna. Zwykle nazywany jest WNDProc (z procedury okna). Wywołanie procedury okna znajduje się w głównym cyklu programu i jest wykonywana na każdej iteracji cyklu.

Wiadomości (w formie zmiennych strukturalnych MSG) ta cecha W postaci parametrów: deskryptor okna, identyfikator wiadomości i dwa parametry. Należy pamiętać, że pola czasowe i PT nie są przesyłane do procedury okna. Oznacza to, że wiadomość jest już "zdemontowana".

Wewnątrz procedury okna gałąź przełącznik znajduje się, w którym sprawdzana jest identyfikator wiadomości. Oto przykład procedury prostej procedury (w pełni działa):

kod w C ++ // Nie zwracaj uwagi na HRESult i __stdcall. Przyjrzymy się na nich później HRESULT __stdcall Wndproc (HWND HWND, Uint Message, WPARAM WPARAM, LPARAM LPARAM) (przełącznik (wiadomość) (Case WM_Paint: // Kod przetwarzania wiadomości WM_PAINT RETURN 0; Case WM_Destroy: // Kod przetwarzania wiadomości WM_Destroy Return 0;) // Obsługa Wszystkie inne wiadomości)

A ostatni jest głównym cyklem. Jest bardzo prosty. Każda iteracja cyklu jest sprawdzana przez kolejkę wiadomości aplikacji. Jeśli w kolejce wiadomości znajduje się komunikat, jest wyciągnięty z kolejki. Następnie procedura okna jest wywoływana w korpusie cyklu, aby obsługiwać wiadomość pobraną z kolejki.

Ogólnie rzecz biorąc, wszystko jest dzisiaj. Jest już jasny, że program WinAPI jest znacznie bardziej skomplikowany przez program w ramach DOS. Jak już napisałem powyżej, w następnej lekcji przeanalizujemy kod programu roboczego.

Utwórz nowy projekt jako ćwiczenie. W oknie nowego projektu wybierz szablon (szablon) - Win32Project (do tej pory wybraliśmy aplikację Win32 Console). W jednym z następujących okien, nie umieszczaj pustego pola wyboru, a IDE wygeneruje obrabiany przedmiot programowy.

Jeśli uważnie spojrzysz na nazwę pliku kodu pliku. CPP, znajdziesz wszystkie rzeczy, które omówiliśmy: zmienna strukturalna MSG, wypełnienie struktury WNDClass, tworząc okno z funkcją CreateWindow, głównym cyklem programu. Ponadto funkcja WNDPROC jest zdefiniowana w pliku. Wymaga przetwarzania kilku wiadomości w gałęziach przełącznika: WM_Command, WM_Paint, WM_Destroy. Znajdź to wszystko w pliku.

Ponadto spojrzeliśmy na program zawiera dużo dodatkowego kodu. W następnym numerze będziemy spojrzeć na kod programu, w którym wszystko jest nadmierne. O wiele łatwiej będzie i wyraźniej, co generuje IDE.

C Winapi jest głównym zestawem interfejsów oprogramowania Microsoft (API) dostępnych w systemach operacyjnych. Wczesna wersja Winning Win32 API.

Wprowadzenie

C Winapi jest interfejsem programowania aplikacji, który służy do tworzenia aplikacji Windows. Aby rozpocząć pracę, użytkownik nowicjusza musi pobrać system Windows SDK znany jako Platform SDK.

Zawiera nagłówek, pliki biblioteki, próbki, dokumentację i narzędzia, które są używane do opracowywania aplikacji. API dla języków programowania C i C ++. Jest to najbardziej bezpośredni sposób na tworzenie aplikacji w systemie operacyjnym z firmy.

C Winapi można podzielić na kilka obszarów:

    podstawowe usługi;

    bezpieczeństwo;

  • interfejs użytkownika;

    multimedia;

    powłoka okienna;

    usługi sieciowe.

Podstawowe usługi zapewniają dostęp do głównych zasobów. Obejmują one funkcje C WinAPI, systemy plików, urządzenia, procesy, strumienie, rejestru i obsługę błędów. Obszar bezpieczeństwa zapewnia interfejsy, obiekty i inne elementy programowania do uwierzytelniania, autoryzacji, kryptografii i innych zadań związanych z bezpieczeństwem. Podsystem graficzny zapewnia funkcjonalność wyświetlania zawartości graficznej na monitorach, drukarek i innych urządzeniach wyjściowych. Interfejs użytkownika zapewnia funkcjonalność tworzenia okien i elementów sterujących.

Komponent multimedialny zapewnia narzędzia do pracy z urządzeniami wideo, dźwiękowymi i wejściowymi. Funkcje interfejsu powłoki umożliwiają aplikacjom dostęp do funkcji dostarczanych przez powłokę systemu operacyjnego. Usługi sieciowe zapewniają dostęp do możliwości sieciowych systemu Windows.

składniki

Tworząc WinAPi C, podstawowe funkcje dostarczane przez API Windows mogą być umieszczone w siedmiu kategoriach. Rozważ każdy z nich bardziej szczegółowo.

Podstawowe usługi zapewniają dostęp do podstawowych zasobów systemowych dostępnych w systemie Windows. Przykłady: system plików, urządzenia peryferyjne, procesy, dostęp do rejestru systemowego i system zarządzania wyjątkiem. Funkcje te są przechowywane w plikach Kernel.exe, krnl286.exe lub krnl386.exe dla 16-bitowych systemów i kernel32.dll i advapi32.dll dla 32-bitowych systemów.

Interfejs graficzny zapewnia dostęp do zasobów na wyświetlanie monitorów, drukarek i innych urządzeń peryferyjnych. Przechowywane w pliku GDI.exe na 16-bitowych systemach i GDI32.dll w systemach 32-bitowych.

Interfejs użytkownika jest odpowiedzialny za oglądanie i zarządzanie głównymi elementami, takimi jak przyciski i paski przewijania, uzyskanie informacji o klawiaturze i myszy, a także powiązanych funkcjach. Funkcje te są przechowywane w pliku user.exe w 16-bitowych systemach i user32.dll Compactl32.dll w systemach 32-bitowych. Począwszy od wersji XP, kontrole zostały pogrupowane w COMCCL32.dll.

Ogólne okna dialogowe - Wyświetl dane do otwarcia i zapisywania plików, wybierz kolor i czcionkę. Są w pliku Comdlg.dll na 16-bitowych systemach i Comdlg32.dll w systemach 32-bitowych.

Windows Shell to komponent WinAPI, który umożliwia aplikacjom dostęp do funkcji dostarczanych przez powłokę systemu operacyjnego.

Usługi sieciowe zapewniają dostęp do różnych możliwości sieciowych systemu operacyjnego. Jego podpozycje obejmują NetBIOS, Winsock, RPC. W starych wersjach - Netdde.

Wersja

Win16, Win32 i Win32 są standardowymi zestawami komponentów, które umożliwiają oprogramowanie do aplikacji do korzystania z funkcji różnych systemów operacyjnych Windows.

Win32, Win16 następca został wprowadzony w 1993 roku w 32-bitowych produktach rodziny Windows, takich jak Windows NT, 2000, 95. To interfejs programu. Wdrożone przez trzy biblioteki oprogramowania.: Kernel32.dll, user32.dll i gdi32.dll2. Te same funkcje Win32 są dostępne we wszystkich produktach Windows, a w zależności od produktu, użycie niektórych funkcji może prowadzić do błędu usługi.

Funkcje Win32 obejmują interakcję między programami, zarządzanie procesami, sieciami komputerowymi, plikami, drukarkami, serwerami i portami komunikacyjnymi.

Specyfikacja

C Winapi jest abstrakcyjnym specyfikacją interfejsu programowania do pracy systemy Windows.. Składa się z reklam funkcji, stowarzyszeń, struktur, typów danych, makr, stałych i innych elementów programowania. WinAPi jest opisany przez głównego i znajduje się w głównych nagłówkach systemu Windows C. Oficjalna implementacja funkcji WinAPI jest w bibliotekach dynamicznych (DLL): na przykład kernel32.dll, user32.dll, GDI32.dll lub Shell32.dll w katalogu systemowym. Istnieją implementacje osób trzecich API systemu Windows: przede wszystkim projekt Wine i projekt Reactos.

Windows API to dynamiczny obiekt. Liczba funkcji stale rośnie z każdym nowa wersja OS i nowe pakiety aktualizacji. Istnieją również ważne różnice między wersjami serwera i wersji pulpitu systemu operacyjnego. Niektóre funkcje nie są oficjalnie udokumentowane.

Pelenki C.

Pelele C jest bezpłatnym programem i najlepszym kompilatorem C i zintegrowanym środowiskiem programistycznym (IDE) dla języka programowego C. Obsługuje 32-bitowe Windows (X86) i 64-bitowe Windows (X64). Wdraża zarówno standardy C99, jak i C11. Pelele C ma wbudowany edytor zasobów, obraz rastrowy, ikona i kursory edytora i redaktor wysypisk szesnastkowych. Jest zaprojektowany przez szwedzką Pelle Dewelopera Orniusa. Nazwa kompilatora niesie nazwę swojego autora. Pochodzi z SDK, więc programista może natychmiast rozpocząć tworzenie aplikacji bez dalszej instalacji.

Błąd architektury docelowej.

Aby utworzyć programy API systemu Windows, należy włączyć rozszerzenia Microsoft. Domyślnie są one wyłączone, dlatego kompilator wyświetla następujący komunikat o błędzie, który służy jako przykład z WinAPi ze złamaną strukturą: błąd fatalny # 1014: #Error: "Brak architektury docelowej" ("Architektura docelowa"). Aby włączyć rozszerzenia Microsoft, przejdź do parametrów projektu i wybierz kartę kompilatora. Na tej karcie Aktywuj pole wyboru "Włącz rozszerzenia Microsoft Extensions".

Msdn.

Jest to centralny portal dla rozwoju systemu Windows. Jest to ogromna kolekcja materiałów związanych z opracowaniem aplikacji za pomocą narzędzi Microsoft. Jest to najbardziej kompletna baza wraz z dokumentacją dla rozwoju aplikacji pulpitu i listy API systemu Windows.

Aplikacja DLL w WinAPI C

Generalna biblioteka zarządzania zapewnia dostęp do zaawansowanych funkcji systemu operacyjnego, takich jak ciągi statusu, wskaźniki wykonania, pasek narzędzi i zakładki. Polecenia te znajdują się w bibliotece Comctrl.dll w systemach 16-bitowych i skomponowanych 33.dll i pogrupowane z interfejsem użytkownika.

DLL to format biblioteki plików biblioteki dynamicznej używanej do przechowywania wielu kodów i procedur programy Windows.. Pliki DLL zostały utworzone w taki sposób, że kilka programów może korzystać z ich informacji jednocześnie, pomagając zaoszczędzić pamięć. Umożliwia użytkownikowi edycję kodowania kilku aplikacji jednocześnie nie zmieniając ich. Biblioteki DLL. Możesz przekształcić się w statyczny za pomocą MSIL Disaseadembler lub DLL dla Lib 3.00.

WinAPI jako interfejs programowania aplikacji dla systemu Windows oferuje wiele potężnych funkcji, które umożliwiają tworzenie programów rozpoczynających się od prostego przetwarzania plików i kończących interfejs graficzny do programowania sterowników urządzeń niskiego poziomu.

Przed rozpoczęciem programowania w WinAPI należy skonfigurować środowisko dla kodu w systemie Windows. Ponieważ nie jest to dystrybucja Linux, nie ma wbudowanego kompilatora do tworzenia aplikacji. Rozważ następujące opcje kompilowania kodu:


Urządzenie jest dostępne dla systemu Windows, który zapewnia dokumentację i narzędzia, które umożliwiają programistom tworzenie oprogramowania za pomocą API i powiązanych technologii.

Interfejs programowania aplikacji Windowsapi (ApplicationProgrammingInterface jest interfejsem programowania systemu w trybie użytkownika dla rodziny systemu operacyjnego Windows. Przed wydaniem 64-bitowych wersji systemu Windows interfejs programu dla wersji 32-bitowych systemów operacyjnych Windows został nazwany API Win32, dzięki czemu można go wyróżnić od początkowego 16-bitowego wersja Windows. API (który służył jako interfejs programowania do początkowej 16-bitowych wersji systemu Windows).

API Windows składa się z kilku tysięcy zwanych funkcji podzielonych na następujące główne kategorie:

  • Usługi bazowe.
  • ServiceComponents (Usługi komponentów).
  • Usługi interfejs użytkownika (Usługi interfejsu użytkownika).
  • Grafika i usługi multimedialne.
  • Wiadomości I. wspólna praca Wiadomości i współpraca.
  • Networking.
  • Usługi internetowe.

Opis Windowsapi można znaleźć w dokumentacji zestawu narzędzi programistycznych oprogramowanie - WindowsSoftwareDevelopmentkit (SDK). Ta dokumentacja jest dostępna na stronie www.msdn.microsoft.com. Jest również włączony ze wszystkimi poziomami subskrypcji do sieci MicrosoftdeveloperNetwork (MSDN), zaprojektowany dla programistów.

Microsoft. Ramy netto. Składa się z biblioteki klasy o nazwie Biblioteka ClassWork Framework (FCL) i kontrolowanego środowiska wdrażania wspólnego środowiska wykonawczego (CLR). CLR ma funkcje terminowej kompilacji, typów kontroli, montaż śmieci i zapewnienie dostępu do kodu. Oferując te funkcje, CLR zapewnia środowisko programistyczne, które poprawia wydajność programistów i zmniejszenie najczęstszych błędów programowania.

Środowisko CLR jest zaimplementowane jako klasyczny serwer COM, którego kod znajduje się w standardowej bibliotece DLL Windows zaprojektowanej do pracy w trybie użytkownika. W rzeczywistości wszystkie elementy .NET Framework są wdrażane jako standardowe Windows. Dll Dll Tryb użytkownika narzucony na górze niezarządzanych funkcji API Windows. (Żaden ze składników ram framework nie działa w trybie jądra.) Zależność między tymi częściami jest pokazana na rysunku.

Usługi, funkcje i standardowe programy.

Niektóre terminy w dokumentacji użytkownika i oprogramowania Windows w różnych kontekstach różne wartości. Na przykład usługa słów może odnosić się do standardowej podprogramu w systemie operacyjnym, sterowniku urządzenia lub do procesu konserwacji. Co dokładnie oznacza te lub inne terminy, pokazane na poniższej liście:

  • Funkcje API Windows. Dokumentowane, zwane podprogramami w Windowsapi. Na przykład createProcess, creatrefile i getmessage.
  • Własne usługi systemowe (lub połączenia systemowe). Inochanned Basic Services w systemie operacyjnym wywołane podczas pracy w trybie użytkownika. Na przykład, NTCreateuserProcess to usługa wewnętrzna funkcja systemu Windows. Cetsprocess wzywa do tworzenia nowego procesu.
  • Funkcje wsparcia jądra (lub podprogramy). Podprogramy w systemie operacyjnym Windows, które mogą być spowodowane tylko z trybu jądra. Na przykład ExallocatePoolWithtag jest podprogramem spowodowanym przez kierowców urządzeń, aby podświetlić pamięć z systemów dynamicznie rozproszonych regionów Windows (zwane pulami).
  • Usługi Windows. Procesy rozpoczęte przez menedżer zarządzania usługami (WindowsServiceControlManager). Na przykład, usługa Menedżera zadań uruchamia się w postaci procesu działającej w trybie użytkownika, w którym obsługuje polecenie na UNIX na lub CRON Commands).
  • Biblioteki DLL (biblioteki dynamiczne - biblioteki dynamicznie podłączone). Zestaw zwanych podprogramów związanych ze sobą w postaci pliku binarnego, który można załadować w trybie dynamicznym aplikacji, które używają tych podprogramów. Jako przykład, możesz przynieść msvcrt.dll (biblioteka czasu wykonania dla aplikacji napisanych w c) i kernel32.dll (jeden z bibliotek podsystemów API systemu Windows). Biblioteki DLL są szeroko stosowane przez komponenty i aplikacje Windows.to działa w trybie użytkownika. Zaleta dostarczana przez biblioteki DLL w porównaniu z bibliotekami statycznymi jest to, że mogą być używane natychmiast przez wiele aplikacji, a system Windows zapewnia pamięć tylko jednej kopii kodu DLL dla aplikacji, w których znajdują się linki do tej biblioteki. Należy zauważyć, że nieprzyjemne zespoły .NET są kompilowane jako biblioteki DLL, ale bez wywiezionych podprogramów. CLR analizuje skompilowane metadane, aby uzyskać dostęp do odpowiednich typów i elementów klas.

Historia Win32 API.

Co ciekawe, Win32 nie był planowany jako interfejs programowania źródłowego systemu, który został w tym czasie nazywany Windows NT. Ponieważ projekt systemu Windows NT rozpoczął się jako wymiana w wersji OS / 2, początkowe interfejs programowania wynosił 32-bitowy system OS / 2 prezentacjiManagerapi. Ale rok po uruchomieniu projektu wybuch wystartował na sprzedaż Windows Microsoft. 3.0. W rezultacie Microsoft zmienił kierunek i dokonał Windows NT do przyszłej wymiany rodziny produkty Windows.i nie zastępuj systemu operacyjnego / 2. W tym względzie istniała potrzeba wypracowania specyfikacji API systemu Windows - przed tym, w systemie Windows 3.0, API istniało tylko w postaci 16-bitowego interfejsu.

Chociaż w programie API systemu Windows wprowadzenie wielu nowych funkcji niedostępnych w systemie Windows 3.1, Microsoft postanowił dokonać nowego API, jak najwięcej z nazwami, semantykami i używanymi typami danych z 16-bitowym API Windows, aby ułatwić obciążenie przenoszenia Istniejące 16-bitowe druki systemowe w systemie Windows NT. W rzeczywistości wyjaśnia, że \u200b\u200bwiele funkcji i nazw interfejsów może wydawać się niespójny: konieczne było zapewnienie zgodności nowe okna API ze starymi 16-bitowymi Windows API.

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu