La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

Findwindow.
Getwindow.
Getwindowtext.
Setwindowtext.
Iswindow.
Movewindow.
Iswindowvisible.
EnableWindow.
Iswindowenabled.
WindowFromPoint.
Showwindow.
Chiudi la finestra.
Setwindowpos.
Getclasslong.
SetClasslong.
Getwindowlong.
Setwindowlong.
GetDesktopwindow.
Ottimizzare

Funzione Findwindow.

funzione findwindow (Classname, Windowname: Pchar): HWND;
La funzione restituisce il descrittore della finestra che soddisfa la query (0-se questa finestra non viene trovata).

Nome della classe. Il nome della classe per il quale viene effettuata la ricerca tra tutte le finestre del sistema. Windowname. Titolo della finestra

Uno dei parametri può essere uguale a NIL, quindi la ricerca viene eseguita su un altro parametro.
Esempio:

Caratteristica GetWindow

funzione GetWindow (WND: HWND; Param): HWnd
La funzione restituisce il descrittore della finestra Richiesta di soddisfazione.

Wnd. Il descrittore di qualsiasi finestra iniziale Parametro Prende uno dei seguenti valori costanti: gw_owner. Restituisce il descrittore della finestra antenato (0 - se non c'è antenato). gWHWNDNDFIRST. Restituisce il descrittore della prima finestra (relativa a WND). gW_HWNDNext. Restituisce il descrittore della finestra successiva (Windows viene spostato senza ripetizioni, I.e. Se non è stato modificato il parametro funzione WND, le descrizioni non vengono nuovamente restituite) gw_child. Restituisce il descrittore della finestra della prima figlia.

Esempio:

GetWindowText Function.

funzione GetWindowText (HWND: HWND; LPString: Pchar; nmaxcount: Integer): Integer;
La funzione restituisce il testo della finestra. Per il modulo sarà il titolo, per il pulsante - l'iscrizione sul pulsante.

hWND. Il descrittore di quella finestra, il cui testo è necessario ottenere. lpstring. Variabile in cui il risultato sarà posizionato nmaxcount.

Lunghezza massima del testo, se il testo è più lungo, è ritagliato.


Esempio:

Caratteristica di iswindow

funzione ISWINDOW (HWND: HWND): BOOL; Restituisce true se la finestra con un determinato descrittore esiste e falso altrimenti.

HWND. Descrivi della finestra desiderata

Caratteristica Movewindow

Movewindow (HWnd: HWND; X, Y, NWIDTH, NHEight: Integer; BRePaint: BOOL): BOOL; Sposta la finestra in una nuova posizione.

hWND. Il descrittore della finestra spostata. X, y, nwidth, nheight Di conseguenza: New. coordinate x, y; Nuova larghezza, altezza. brepaint. Valore booleano che mostra se la finestra è ridisegnata.

Funzione iswindowvisible.

funzione iswindowvisible (HWND: HWND): BOOL;
Restituisce true se questa finestra è apparentemente.

hWND. Descrittore finestra.

Caratteristica EnableWindow

funzione EnableWindow (HWND: HWND; BENABLE: BOOL): BOOL;
Imposta la disponibilità della finestra (la finestra non è disponibile se non risponde agli eventi del mouse, della tastiera, ecc.). Analogico nella proprietà componente abilitata Delphi. EnableWindow restituisce true se tutto è passato con successo e false è costruito.

hWND. Descrittore finestra. benibile Valore booleano che definisce la disponibilità della finestra.


Esempio:

Funzionalità iswindowenabled.

funzione iswindowenabled (HWND: HWND): BOOL;
Ritorna per una finestra specificata: True, se la finestra è disponibile e falsa altrimenti.

hWND. Descrittore finestra.

FunnyFromPoint Feature.

WindowFromPoint (punto: tpollo): HWND;
Restituisce il descrittore della finestra situato in questa schermata.

Punto Tipo Coordinata punto schermo Tpollo.(Come definizione del tipo di seguito)

Funzione

genere Tpolino \u003d. Disco. X: longint; Y: longint; fine.;

Funzione showwindow.

funzione showwindow (HWND: HWND; NCMDShow: Integer): BOOL; Mostra o nasconde una finestra.

hWND. Descrivi della finestra desiderata ncmdshow. Costante, definendo ciò che verrà fatto con la finestra: Sw_hide. SW_SHOWNORMAL.Sw_normal. Sw_showminimized. Sw_showmaximized. Sw_maximize. Sw_showroactivate. Sw_show. Sw_minimize. Sw_showminnoactive. SW_SHOWNA. Sw_restore. Sw_showdefault. Sw_max.


Esempio:

Caratteristica di closeewindow

funzione closewindow (HWND: HWND): BOOL; STDCALL;
Chiude la finestra.

hWND. Descrivi la finestra chiusa.

Setwindowpos.

funzione setWindowpos (HWND: HWND; HWNDInSertafter: HWND; X, Y, CX, CY: Integer; UFlags: UINT): BOOL; STDCALL;
Imposta la finestra in una nuova posizione

hWND. Finestra oplantante hwndinsertafter. Descrittore finestra, davanti a quale nella lista Z-ordine. Una finestra sarà inserita hWND.o una delle seguenti costanti: HWND_bottom. Metti la finestra in fondo all'elenco di z-ordine HWND_TOP. Posiziona la finestra sulla parte superiore dell'elenco Z. X, y, cx, cy

Di conseguenza, il nuovo orizzonte. , Vert. Posizioni della finestra ( X, y.), così come una nuova larghezza
e altezza ( cx, cy.)

uFLAG. Uno o più (separati O.) Le seguenti costanti: Swp_nosize. Non modificare le dimensioni della finestra dopo il movimento ( cx, cy. ignorare) Swp_nozorder. Non modificare la posizione della finestra nell'elenco degli ordini Z Swp_showwindow. Fai una finestra visibile dopo lo spostamento Swp_hidewindow. Nascondi la finestra dopo il movimento Swp_noactivate. Non passare la finestra di messa a fuoco dopo il movimento Swp_nomove. Non spostare la finestra (ignorata X, y.)

GetClassLong Function.

funzione GETCLASLONG (HWND: HWND; Nindex: Integer): Integer;
Questa funzione restituisce un numero intero a 32 bit, prelevato da un campo di immissione specifico. Twndclassex. Finestra specificata.

hWND. Descrivi la finestra nindex. Costante, definendo ciò che verrà restituito. Ci deve essere uno dei seguenti: Gcl_menuname. Restituisce un puntatore a una stringa contenente il nome del menu della classe definito nel file della risorsa associato ad alcuni programmi. Gcl_hbrbackgroud. Restituisce il descrittore (hbrush) dello sfondo dello sfondo associato alla classe Gcl_hcursor. Restituisce il descrittore (HCursor) del cursore, sagomato con classe Gcl_hicon. Restituisce il descrittore (hicon) del pittogramma associato alla classe Gcl_hmodule. Restituisce il descrittore del processo (hmodule), classe registrata. GCL_CBWNDEXTRA. Restituisce la dimensione della memoria (in byte) selezionata per la memorizzazione di dati aggiuntivi di questa finestra. Descrizione Come utilizzare questa memoria, guarda nella descrizione della funzione Gcl_cbclsextra. Restituisce la dimensione della memoria (in byte) selezionata per la memorizzazione dei dati di classe aggiuntivi Gcl_wnddproc. Restituisce l'indirizzo della procedura della finestra associata alla classe. GCL_Style. Restituisce lo stile di stile (la presenza di uno o un altro stile è controllato da un'operazione battuta E. usando le costanti del tipo cs_xxx.) Gcl_hiconsm.

Nota: Nel caso in cui la funzione restituisca un puntatore, è necessario portare i tipi (Integer -\u003e

Funzione SetClassLong.

funzione SetClassLong (HWND: HWND; Nindex: Integer; DWNewlong: Longint): Integer; Funzione funzione. Imposta il valore appropriato nel campo desiderato.
La funzione restituisce il vecchio valore del campo in modo che possa essere corretto o viene restituito a zero, se qualcosa non è andato come dovrebbe.

hWND. Descrivi la finestra nindex. Una delle costanti Gcl_xxx. Dalla funzione. A seconda del valore di questo campo, il campo desiderato verrà modificato.

Nota Puntatore. Digitare Numero intero.

Funzione getwindowlong.

fUNCTION GETWINDOLGONG (HWND: HWND; Nindex: Integer): longint; Restituisce le informazioni su qualche finestra sotto forma di un numero intero a 32 bit.

hWND. Descrivi la finestra nindex. Definizione costante Cosa verrà restituito. Ci deve essere uno dei seguenti:
GWL_WNDPROC. Restituisce l'indirizzo della procedura della finestra associata a questa finestra. L'indirizzo ricevuto (dopo che i tipi di tipi corrispondenti) possono essere utilizzati in funzione. Callwindowproc.. Questo valore Di solito usare se vogliono sostituire la procedura della finestra esistente da sola, mentre non perdere le finestre, in genere utilizzare Callwindowproc.. Gwl_hinstance. Restituisce un descrittore di applicazione specificato quando si crea una funzione finestra Createwindowex.. GWL_HWNDPARENT. Restituisce il descrittore (HWND) della finestra genitore GWL_Style. Restituisce lo stile della finestra. I valori dei promozione degli stili sono riconosciuti utilizzando un'operazione battuta E. e costante Ws_xxx. Gwl_exstyle. Restituisce lo stile della finestra avanzata. I valori dei promozione degli stili sono riconosciuti utilizzando un'operazione battuta E. e costante Ws_ex_xxx. GWL_USERDATA. Restituisce un numero intero a 32 bit associato alla finestra (questo è l'ultimo parametro in createwindow o createwindowex) GWL_ID. Restituisce l'ID della finestra (non ha nulla a che fare con il descrittore della finestra!) Impostare il parametro HMENU per Windows Bambino quando si chiama Createwindow o CreatewinDowex

Nota: Nel caso in cui la funzione restituisca un puntatore, è necessario portare i tipi (Integer -\u003e Puntatore). Puoi farlo come questo:

Caratteristica SetWindoLong.

fUNCTION SETWINDOLGONG (HWND: HWND; Nindex: Integer; DWNewlong: Longint): Longant;
Coppia alla funzione. Cambia gli attributi di una finestra specifica.
La funzione restituisce il vecchio valore di proprietà se la chiamata è passata con successo o zero altrimenti.

hWND. Descrivi la finestra nindex. Definizione costante Quale proprietà verrà modificata. Deve essere una delle costanti GWL_XXX. Dalla descrizione della funzione dwnewlong. Il nuovo valore della proprietà determinato dalla costante nindex.

Nota: Quando si installano campi di campo, è necessario portare il tipo Puntatore. Digitare Numero intero.

Caratteristica GetDesktopwindow

funzione GetDesktopWindow: HWndD
La funzione restituisce il descrittore della finestra del desktop (desktop). Senza parametri.

Ottimizzare

funzione GETPARENT (HWND: HWND): HWND;
Restituisce il preferito della finestra genitore per la finestra hWND..

hWND. Descrivi la finestra

Con WinAPI, è possibile creare varie procedure di finestre, finestre di dialogo, programmi e persino giochi. Questo, diciamo, la biblioteca è una programmazione di base, MFC, perché queste interfacce sono componenti aggiuntivi di questa libreria. Dopo averlo imparato, creerai facilmente moduli e capisci come succede.

Non sarà introdotto in teoria. Iniziamo con come creare questo progetto in MVS, e alla fine dell'articolo ci sarà un semplice esempio.

Così. Primo aperto Visual Studio., quindi, fare clic sulla scheda File, quindi "Crea progetto":

Quindi, nell'elenco a discesa Visual C ++, selezionare Win32, ci sarà "Project Win32". Cliccaci sopra:
Entriamo nel nome del progetto, specifica il percorso e fai clic su "OK". Il prossimo sarà scritto: "Benvenuto in Win32 Application Wizard". Fare clic su Avanti. Per impostazione predefinita, l'iscrizione "Empty Project" non è disponibile. Dobbiamo metterlo e assicurarci che abbiamo un "tipo di applicazione" - Applicazione Windows. Se tutto è vero, fai clic su - "Fine."

Dobbiamo avere un progetto vuoto di questo tipo:

Bene, ora inizia a scrivere programma sempliceche tradizionalmente mostrerà l'iscrizione: "Ciao, pace !!!".

Naturalmente, è necessario aggiungere un file di tipo "Nome" .CPP al progetto. Clicca su "File del codice sorgente" fare clic con il tasto destro Topi, nell'elenco a discesa, selezionare la scheda - "Aggiungi", quindi "Crea un elemento ...". Di conseguenza, questa finestra dovrebbe apparire:

Seleziona il file "C ++", inserisci un nome, fai clic su "Aggiungi". Quindi apri questo file e inserisci tale codice in esso (i dettagli di seguito):

#Includere. // File di intestazione contenente le funzioni API // Funzione principale - Un analogico int principale () nella console APPLICAZIONE: INT WinAPI WinMain (Hinstance Hinmain, // Il descrittore dell'istanza dell'istanza Hprevinstance HInstance, // in Win32 non è usato LPCMDline LPSTR // Hai bisogno di avvio nella modalità riga di comando int Ncmdshow) // Modalità di visualizzazione della finestra (// Funzione di uscita della finestra con il pulsante "OK" sullo schermo (sui parametri più avanti) MessageBox (NULL, L Ciao, World !!! " , L "Procedura della finestra", MB_OK); ritorno null; // restituisce il valore della funzione)

Il risultato dovrebbe essere così:

Ora fermiamo più dettagliatamente sul codice del programma.

Nella prima riga, colleghiamo il file di intestazione di Windows.h. Contiene tutte le funzioni "Apish" necessarie. Tutto è chiaro qui.

NEL 4-7 file Abbiamo una descrizione della funzione Int Winpi Winmain ().

La qualifica di WinAPI, è necessaria per la funzione Winmain. Ricordalo. Winmain - nome della funzione. Ha quattro parametri. Il primo è Hinstance Hinstance ( riga 4.). Hinstance è un descrittore dell'istanza della finestra (questo è un determinato codice di procedura della finestra, un identificatore su cui il sistema operativo lo distinguerà da altre finestre). Attraverso di esso, è possibile fare riferimento alla finestra nel processo di lavoro in altre funzioni (circa questo successivo), qualcosa da cambiare nei parametri della finestra. Hinstance è uno dei numerosi tipi di dati definiti in WinAPI, come per esempio. E la registrazione di Hinstance Hinstance ci dice che creiamo una nuova variabile di tipo Hinstance con il nome di Hinstance.

Parleremo dei tipi di dati più tardi, quindi andiamo al parametro successivo: Hinstance Hprevinstance ( riga 5.). Come scritto nei commenti, non è utilizzato in Win32, come creato per 3.x il sistema di scarica, è chiaro dal precedente che questo è un descrittore di istanza di finestre. Quindi, abbiamo un tipo variabile LPSTR ( riga 6.) Con il nome lpcmdline. Viene utilizzato se eseguiamo una finestra attraverso riga di comando Con parametri chiave. Via molto esotica, quindi non ti attaccheremo su di esso.

E l'ultimo parametro: Integer, definisce il modo per visualizzare la finestra. Hai bisogno per la funzione ShowDindow, che sarà descritta in seguito. Ad esempio, con esso, possiamo distribuire la finestra per l'intero schermo, renderlo una certa altezza, trasparente o in cima al resto.

Vai alla funzione MessageBox () () ( riga 10.). Ha quattro parametri ed è necessario per emettere i messaggi di errore, ad esempio. In questo caso, l'abbiamo usato per visualizzare il messaggio. In generale, la descrizione della funzione è la seguente:

Int MessageBox (HWND HWnd, // Descrittore Finestra genitore LPCTSTR LPTEST, // Puntatore a una stringa con LPCTSTR LPCAPZIONE, // Puntatore su una stringa con testo UTER UTERO UTYPE); // Bandiere per visualizzare i pulsanti, stile pittogramma e altro stile e altro

Nel nostro caso, viene assegnato il primo parametro zero. Tutto perché non abbiamo finestre parentale (non è lanciato da qualche programma).

Successivamente, abbiamo due variabili come LPCTSTR: LPTESTREXT e LPCAPTION. Il primo riporta le informazioni che verranno visualizzate nella finestra nel modulo di testo. Il secondo rapporto che sarà scritto nel testo dell'intestazione alla finestra. Questo è un char di analogico * str, ma ancora no. Affinché il testo venga visualizzato correttamente, è necessario mettere la lettera l prima della stringa ( Unicode. linea).

Bene, l'ultimo tipo di dati - UINT - 32 bit intatto senza un segno. Cioè, un int analogico non firmato. Questo parametro può essere trasmesso alcuni valori (su di essi successivi), a causa del quale è possibile modificare il tipo del pulsante. Nel nostro caso, questo è MB_OK - significa che la finestra crea un pulsante con l'iscrizione "OK" e l'azione corrispondente quando viene premuto (chiudendo l'applicazione).

NEL riga 11.restituiamo il valore della funzione, in quanto non ha alcun tipo vuoto.

Quindi, l'idea generale di WinAPI è ora. Continua nelle sezioni seguenti.

Alla fine! Alla fine! Oggi inizieremo a creare una finestra Windows completa. Addio miserabile console !!!

A questo punto, dovresti già sapere come sapere la sintassi C ++, essere in grado di lavorare con ramificazione e cicli, benissimo capire il funzionamento delle funzioni. Se hai affrontato il combattimento del mare, puoi presumere che tu abbia imparato tutto questo.

Forma di registrazione ungherese

L'intero codice che ci incontreremo in WinAPI è scritto in uniforme ungherese. Questo è un tale accordo sul codice di scrittura.

Allo stesso tempo, la lettera iniziale del tipo è installata prima del nome della variabile. Tutte le parole nei nomi delle variabili e delle funzioni iniziano con una lettera maiuscola.

Ecco alcuni prefissi:

b - Tipo variabile BOOL.
L - Tipo variabile intero intero.
W - dalla parola (parola) - 16 bit. Tipo variabile Breve breve.
DW - Dalla doppia parola (doppia parola) - 32 bit. Tipo variabile senza segno lungo.
SZ - String terminato zero (zero terminato a corda). Solo la solita corda che abbiamo usato costantemente.
P o lp - puntatore (dal puntatore). LP (dal puntatore lungo) - questi puntatori sono passati dal passato. Ora LP e P significano la stessa cosa.
H è il descrittore (da maniglia).

Ad esempio, il puntatore sarà chiamato come questo:

void * PData;

Questa forma di registrazione viene utilizzata da Microsoft. Molti criticano questo metodo di denominazione delle variabili. Ma tali cose (accordi di codifica) in grandi aziende sono vitali.

Lascia che ti ricordi che gli identificatori di costanti di solito consistono solo dalle lettere maiuscole: wm_destroy. Wm_destoy è 2, la costante è definita attraverso Defin.

Inoltre, WinAPI utilizza molti tipi ridefiniti. Qui su questa pagina - http://msdn.microsoft.com/en-us/library/aa383751(vs.85).aspx, puoi trovare le descrizioni di tutti i tipi di finestre (in inglese).

E un'altra cosa che non abbiamo smontato. I puntatori sono spesso assegnati valore nullo. Considera che è semplicemente 0 e i puntatori assegnati a NULL (zero), non indicare a nessuno di porzione.

API di Windows (WinAPI)

Tutti i programmi Windows utilizzano un'interfaccia di programmazione WinAPI speciale. Questo è un insieme di funzioni e strutture nella lingua C, grazie a cui il tuo programma diventa compatibile con Windows.

L'API di Windows ha enormi funzionalità del sistema operativo. Puoi persino dire - senza limiti.

Non considereremo nemmeno percento di tutte le funzionalità di WinAPI. Inizialmente, volevo prendere più materiale, ma ci vorrebbe troppo tempo e sbattendo in Winapi Swamp, prima di DirectX "e saremmo arrivati \u200b\u200btra un paio d'anni. Descrizione WinAPI prenderà due lezioni (incluso questo). Considera solo il fotogramma dell'applicazione sotto Windows.

Il programma sotto Windows è esattamente lo stesso del programma DOS funzione principale. Qui questa funzione è chiamata Winmain.

Winmain funzionalità

Il programma sotto Windows è costituito dalle seguenti parti (tutto ciò accade all'interno di Winmain):

Crea e registra la classe della finestra. Non confondere le classi C ++. WinAPI è scritto in c, non ci sono classi nella consueta comprensione di questa parola.
Creando una finestra del programma.
Il ciclo principale in cui vengono elaborati i messaggi.
Elaborazione dei messaggi del programma nella procedura della finestra. La procedura della finestra è una funzione convenzionale.
Questi quattro articoli sono la base del programma Windows. Durante questa e la prossima lezione, analizzeremo tutto questo in dettaglio. Se sei confuso nella descrizione del programma, quindi torna a questi articoli.

Ora analizzeremo tutto questo in dettaglio:

WinAPI: struttura wndclass

Prima di tutto, è necessario creare e compilare la variabile strutturale wndclass e quindi basata su di esso per registrare la classe della finestra.

Ecco come appare questa struttura:

codice in C ++ Typettef Struct (stile UINT; // WNDPROC LPFNWNDPROC Style Style; // Puntatore alla finestra Int CBCLSExtra Procedura; // Byte aggiuntivi dopo la lezione. Sempre 0 int cbwndextra; // byte aggiuntive dopo un'istanza della finestra. Metti sempre 0 Hinstance Hinstance; / / Application istance. trasmesso come parametro in Winmain Hicon Hicon; // HCURSOR HCURSOR Application Icon // Hbrust HBRBRACKGRUND APPLICAZIONE APPLICAZIONE; // LPCTSTR LPCSCENUNUNE MENU CONTROLLO; // LPCTSTR Nome menu LPCTSName; // Nome della classe) wndclass , * Pwndclass;

La struttura WNDClass in WinAPI determina le proprietà di base della finestra creata: Icone, vista del cursore del mouse, esiste un menu per finestra, quale applicazione apparterrà alla finestra ...

Dopo aver compilato questa struttura, è possibile registrare una classe finestra in base ad esso. Non stiamo parlando di classi come in C ++. Piuttosto, possiamo supporre che la classe della finestra sia tale modello, ne hai registrato nel sistema e ora sulla base di questo modello è possibile creare diverse finestre. E tutte queste finestre avranno le proprietà che hai definito nella variabile strutturale wndclass.

WinAPI: Funzione di createwindow

Dopo aver registrato la classe della finestra, si basa sulla finestra principale dell'applicazione (ora abbiamo avviato il secondo elemento). Questo viene fatto usando la funzione di createwindow. Ha il seguente prototipo:

codice in C ++ HWND Createwindow (LPCTSTR LPClassName, // LPCTSTR LPWindowname Nome della classe, // Nome della finestra (visualizzato nell'intestazione) DWSTYLE DWStyle, // Style Int X, // Coordinata orizzontale dal bordo sinistro dello schermo int Y, // coordinata verticale Il bordo superiore della schermata Int Nwidth, // la larghezza della finestra Int Nheight, // altezza della finestra HWND HWndParent, // finestra genitore HMENU HMENU, // descrittore HINSTANCE HINSTANCE MENU, // istanza dell'applicazione LPPARAM LPVOID // parametro; inserire sempre null);

Se le proprietà di base della finestra sono impostate nella classe della finestra (struttura wndclass), qui sono più specifiche per ogni finestra: dimensione della finestra, coordinate ...

Questa funzione restituisce il descrittore della finestra. Usando il descrittore, è possibile accedere alla finestra, è approssimativamente come identificatore.

Si prega di notare che ci sono molti nuovi tipi. In effetti, sono tutti vecchi, semplicemente ridefiniti. Ad esempio: HWnd è una ridefinizione del tipo di maniglia, che a sua volta è la ridefinizione del Pvoid, che a sua volta è annullata vuoto *. Quanto profondamente sepolto la verità! Ma ancora il tipo HWnd è un puntatore in Void.

La finestra è composta da diverse parti. In quasi tutti i programmi vedrai: il titolo della finestra, il menu del sistema (se si fa clic sull'icona dell'applicazione nella parte superiore sinistra della finestra), tre pulsanti di sistema per funzionare con la finestra: Collapse, distribuire a schermo intero e chiudere. Inoltre, quasi sempre nell'applicazione c'è un menu. Questo è solo l'ultimo che non lo faremo sicuramente. E, naturalmente, la maggior parte della finestra occupa il cosiddetto. L'area client in cui l'utente è solitamente e funziona.

Riguarda il regime della finestra. Per un bel po 'di tempo, praticheremo con DEECTX nella finestra - non useremo una modalità a schermo intero.

Elaborazione dei messaggi (gestione dei messaggi)

La differenza principale di tutti i nostri programmi precedenti dai programmi Windows è quello di elaborare i messaggi.

Ad esempio, quando un utente preme un tasto sulla tastiera, viene generato un messaggio che è stato premuto il tasto. Quindi questo messaggio entra nell'applicazione attiva quando l'utente ha premuto il tasto.

Qui abbiamo avuto un evento (evento) - la chiave è stata premuta.

Un evento può essere: spostare il cursore del mouse, modificando la messa a fuoco dell'applicazione, premendo il tasto della tastiera, chiudendo la finestra. Ci sono molti eventi. Altamente! Durante un secondo, nel sistema operativo può verificarsi dozzine di eventi nel sistema operativo.

Quindi, quando si verifica un Everight, il sistema operativo crea un messaggio: tale tasto è stato premuto, le coordinate del cursore del mouse sono state modificate, è stata aperta una nuova finestra.

I messaggi possono creare sia il sistema operativo che varie applicazioni.

Il messaggio è una struttura e sembra questo:

codice in C ++ TypeDef Struct TagMSG (HWND HWND; // Una finestra che riceverà questo messaggio Messaggio UINT; // codice messaggio WPARAM WPARAM; // LARAM LPARRAM PARAMETRO; // Parametro DWORD TIME; // TIME QUANDO IL MESSAGGIO PT PT APPRESA // Coordinate msg) msg;

Si prega di notare come le strutture vengono ridefinite utilizzando TypeDef.

Creare questa struttura È possibile utilizzare il seguente codice:

codice in C ++ msg.messgae \u003d\u003d 2; // Queste due linee sono equivalenti perché msg.message \u003d\u003d wm_destroy; // la costante wm_destroy è uguale a due

Qui, il campo contenente il codice del messaggio (il nome del messaggio viene confrontato con la costante WM_Destroy. WM - dal messaggio di Windows (Messaggio di Windows). WM_Destroy è un messaggio che viene generato quando la finestra è chiusa (distrugga - distruggere).

I codici dei messaggi sono definiti utilizzando costanti e hanno il prefisso wm_: wm_close, wm_create, ecc.

La struttura MSG incontra il tipo HWND - dalla maniglia della finestra (descrittore della finestra o descrittore della finestra). Questa è una cosa che "descrive" la finestra. Questo è qualcosa come un identificatore (nome della finestra).

Ricorda questa parola - maniglia (descrittore, descrittore). In Windows, questo concetto è usato molto spesso. Quasi tutti i tipi di finestre che iniziano con H - Descrittori: il descrittore dell'icona, il descrittore di font, la descrizione dell'istanza dell'applicazione. Sono trenta, per quanto mi ricordo.

Tutte le interazioni tra le applicazioni Windows vengono eseguite utilizzando queste finestre più desiderate (HWND).

C'è un altro descrittore importante - un descrittore di applicazione (Hinstance - il primo parametro Winmain) è un identificativo univoco dell'applicazione, grazie a cui il sistema operativo non può confondere due programmi diversi. È approssimativamente come un codice a barre. Lo guarderemo più tardi.

Ogni volta che l'utente effettua un po 'di azione, viene creato e riempito un messaggio: è specificato un descrittore di finestra, che questo messaggio deve essere ottenuto, viene specificato l'identificatore del messaggio, i parametri sono riempiti, il tempo (corrente) è riempito e le coordinate di Il cursore del mouse è pieno (vedi la struttura).

Successivamente, questo messaggio è inserito nella coda dei messaggi. sistema operativo. Quando la coda viene raggiunta sul nostro messaggio, viene inviata dalla finestra desiderata (Windows sa quale finestra inviare ciascun messaggio attraverso i descrittori). Quando un messaggio arriva nell'applicazione, viene inserito nella coda dei messaggi messaggi. Non appena arriva, è elaborato.

Guarda, nel frattempo, quando l'utente ha effettuato alcuna azione (si è verificato un evento e un messaggio è stato generato) e il momento in cui il programma ha reagito a questa azione (il messaggio è stato elaborato dal programma) Ci sono molti eventi. Dopo tutto, sia nella coda dei messaggi di Windows che nella coda dei messaggi dell'applicazione può essere un sacco di messaggi. Nel primo caso, possiamo parlare di centinaia, nel secondo caso almeno circa diversi.

Procedura della finestra (procedura della finestra - wndproc)

Continuiamo dal momento in cui il messaggio ha premuto la coda del messaggio del messaggio. Non appena lo raggiunse, viene elaborato. Per gestire i messaggi, ogni programma dovrebbe esistere una funzione speciale - una procedura di finestra. Di solito viene chiamato wndproc (dalla procedura della finestra). Chiamare la procedura della finestra si trova nel ciclo del programma principale ed è eseguita ad ogni iterazione del ciclo.

I messaggi (sotto forma di variabili strutturali msg) cadono in questa caratteristica Sotto forma di parametri: descrittore della finestra, identificatore dei messaggi e due parametri. Si noti che i campi tempo e PT non vengono trasmessi alla procedura della finestra. Cioè, il messaggio è già "smontato".

All'interno della procedura della finestra, il ramo dell'interruttore si trova in cui viene controllato l'identificatore del messaggio. Ecco un esempio di una semplice procedura di finestra (funziona completamente):

codice in C ++ // Non presta attenzione a Hresult e __stdcall. Li guarderemo in seguito Hresult __stdcall wndproc (HWND HWND, Messaggio UINT, WPARAM WPARAM, LPARAM LPARAM) (Switch (Message) (Caso WM_Paint: // Codice di elaborazione dei messaggi WM_Paint Resturn 0; Caso WM_Destroy: // Codice di elaborazione dei messaggi WM_Destroy Return 0;) // Gestore Tutti gli altri messaggi)

E l'ultimo è il ciclo principale. È molto semplice. Ogni iterazione del ciclo è selezionata da una coda di messaggi di applicazione. Se c'è un messaggio nella coda dei messaggi, viene estratta dalla coda. Quindi la procedura della finestra è chiamata nel corpo del ciclo per gestire il messaggio prelevato dalla coda.

Qui, in generale, tutto è oggi. È già chiaro che il programma WinAPI è molto più complicato dal programma sotto DOS. Come ho già scritto sopra, nella prossima lezione analizzeremo il codice del programma di lavoro.

Crea un nuovo progetto come esercizio. Nella finestra Nuova Progetto, selezionare il modello (modello) - Win32Project (finora abbiamo scelto l'applicazione della console Win32). In una delle seguenti finestre, non posizionare la casella di controllo del progetto vuota e IDE genererà un pezzo di lavoro del programma.

Se guardi attentamente il codice file_name. CPP, troverai tutte le cose che abbiamo discusso: la variabile strutturale MSG, compilando la struttura WNDClass, creando una finestra con la funzione di createwindow, il ciclo principale del programma. Inoltre, la funzione WNDPROC è definita nel file. Prende la lavorazione di diversi messaggi nei rami dell'interruttore: wm_command, wm_paint, wm_destroy. Trova tutto questo nel file.

Inoltre, abbiamo esaminato il programma contiene un sacco di codice aggiuntivo. Nel prossimo numero, guarderemo il codice del programma in cui tutto è eccessivo. Sarà molto più semplice e più chiaro ciò che sta generando IDE.

C WinAPI è il set principale di Microsoft Software Interfaces (API) disponibile nei sistemi operativi. Versione iniziale Vincere API Win32.

introduzione

C WinAPI è un'interfaccia di programmazione dell'applicazione utilizzata per creare applicazioni Windows. Per iniziare il lavoro, l'utente del principiante deve scaricare le finestre SDK precedentemente note come Platform SDK.

Contiene intestazione, file di libreria, campioni, documentazione e strumenti utilizzati per sviluppare applicazioni. API per i linguaggi di programmazione C e C ++. Questo è il modo più diretto per creare applicazioni nel sistema operativo dalla società.

C WinAPI può essere diviso in diverse aree:

    servizi di base;

    sicurezza;

  • interfaccia utente;

    multimedia;

    shell Windows;

    servizi di rete.

I servizi di base offrono l'accesso alle risorse principali. Questi includono funzioni c WinAPI, file system, dispositivi, processi, flussi, registro e gestione degli errori. L'area di sicurezza fornisce interfacce, oggetti e altri elementi di programmazione per l'autenticazione, l'autorizzazione, la crittografia e altri compiti relativi alla sicurezza. Il sottosistema grafico garantisce la funzionalità di visualizzare contenuto grafico su monitor, stampanti e altri dispositivi di output. L'interfaccia utente fornisce funzionalità per creare finestre e controlli.

Componente multimediale fornisce strumenti per lavorare con dispositivi video, audio e di ingresso. Le funzioni dell'interfaccia Shell consentono alle applicazioni di accedere alle funzioni fornite dalla shell del sistema operativo. I servizi di rete forniscono l'accesso alle funzionalità di rete di Windows.

Componenti

Durante la creazione di WinAPI C, le funzionalità di base fornite da Windows API possono essere organizzate in sette categorie. Considera ognuno di loro in modo più dettagliato.

I servizi di base forniscono l'accesso alle risorse di sistema di base disponibili in Windows. Esempi: file system., dispositivi periferici, processi, accesso al registro di sistema e un sistema di gestione delle eccezioni. Queste funzioni sono memorizzate in file kernel.exe, krnl286.exe o krnl386.exe per sistemi a 16 bit e kernel32.dll e advapi32.dll per sistemi a 32 bit.

L'interfaccia grafica consente l'accesso alle risorse da visualizzare su monitor, stampanti e altre apparecchiature periferiche. Memorizzato nel file GDI.exe su sistemi a 16 bit e GDI32.dll in sistemi a 32 bit.

L'interfaccia utente è responsabile della visualizzazione e della gestione degli elementi principali, come pulsanti e strisce di scorrimento, ottenendo informazioni sulla tastiera e il mouse, nonché le funzioni correlate. Queste funzioni sono memorizzate nel file utente.exe in sistemi a 16 bit e user32.dll CompactL32.dll in sistemi a 32 bit. A partire dalla versione XP, i controlli sono stati raggruppati in Comctl32.dll.

Dialogie generali: visualizza i dati per l'apertura e il salvataggio dei file, selezionare Colore e carattere. Sono nel file comdlg.dll su sistemi a 16 bit e comdlg32.dll in sistemi a 32 bit.

Windows Shell è un componente WinAPI che consente alle applicazioni di accedere alle funzioni fornite dalla shell del sistema operativo.

I servizi di rete forniscono l'accesso a varie funzionalità di rete del sistema operativo. I suoi sottocomponenti includono NetBIOS, Winsock, RPC. Nelle vecchie versioni - NetDDE.

Versione

Win16, Win32 e Win32s sono set standard di componenti che consentono il software applicativo di utilizzare le funzioni di vari sistemi operativi Windows.

Win32, Win16 Successor, è stato introdotto nel 1993 in prodotti a 32 bit della famiglia Windows, come Windows NT, 2000, 95. Questo interfaccia del programma Implementato da tre. librerie software: Kernel32.dll, user32.dll e gdi32.dll2. Le stesse funzioni Win32 sono disponibili in tutti i prodotti Windows e, a seconda del prodotto, l'uso di determinate funzioni può portare a Errore di servizio.

Le funzionalità Win32 includono l'interazione tra programmi, gestione dei processi, reti di computer, file, stampanti, server e porte di comunicazione.

Specifiche

C WinAPI è una specifica di interfaccia di programmazione astratta per il funzionamento sistemi Windows.. Consiste di annunci di funzioni, associazioni, strutture, tipi di dati, macro, costanti e altri elementi di programmazione. WinAPI è descritto dal principale ed è nei titoli di Windows C. L'implementazione ufficiale delle funzioni WinAPI è in librerie dinamiche (DLL): ad esempio, kernel32.dll, user32.dll, gdi32.dll o shell32.dll nella directory di sistema. Ci sono implementazioni di terze parti dell'API di Windows: prima di tutto, il progetto del vino e il progetto Reactos.

L'API di Windows è un oggetto dinamico. Il numero di funzioni è in costante crescita con ciascuno nuova versione OS e nuovi pacchetti di aggiornamento. Ci sono anche differenze importanti tra versioni server e versioni desktop del sistema operativo. Alcune funzioni non sono ufficialmente documentate.

Pelles C.

Pelles C è un programma gratuito e il miglior compilatore C e un ambiente di sviluppo integrato (IDE) per il linguaggio di programmazione C. Supporta Windows a 32 bit (X86) e Windows a 64 bit (X64). Implementa sia gli standard C99 che la C11. Pelles C ha un editor di risorse integrato, immagine raster., Icona e redattore cursori ed editore di discariche esadecimali. È progettato dallo sviluppatore svedese Pelle Orinius. Il nome del compilatore trasporta il nome del suo autore. Viene fornito con un SDK, quindi il programmatore può immediatamente iniziare a creare applicazioni senza ulteriori installazioni.

Errore l'architettura di destinazione

Per creare programmi API di Windows, è necessario abilitare le estensioni Microsoft. Per impostazione predefinita, vengono disattivati \u200b\u200be quindi il compilatore visualizza il seguente messaggio di errore che funge da esempio con WinAPI con una struttura rotta: errore irreversibile # 1014: #Error: "Nessuna architettura target" ("Nessuna architettura di destinazione"). Per abilitare le estensioni Microsoft, andare ai parametri del progetto e selezionare la scheda Compilatore. In questa scheda, attivare la casella di controllo "Abilita Microsoft Extensions".

Msdn.

È un portale centrale per lo sviluppo di Windows. Questa è un'enorme raccolta di materiali relativi allo sviluppo di applicazioni utilizzando Microsoft Tools. Questa è la base più completa insieme alla documentazione per lo sviluppo di applicazioni desktop e l'elenco API di Windows.

Applicazione DLL in WinAPI C

La General Management Library fornisce l'accesso alle funzioni avanzate del sistema operativo, come stringhe di stato, indicatori di esecuzione, barra degli strumenti e schede. Questi comandi si trovano nella libreria CommCtrl.dll in sistemi a 16 bit e Compl32.dll e raggruppati con l'interfaccia utente.

DLL è il formato di una libreria di file di biblioteca dinamica utilizzata per memorizzare più codici e procedure per programmi Windows.. I file DLL sono stati creati in modo tale che diversi programmi potrebbero utilizzare le proprie informazioni contemporaneamente, contribuendo a salvare la memoria. Consente all'utente di modificare la codifica di diverse applicazioni contemporaneamente senza cambiarle. Librerie DLL. È possibile convertire in Static utilizzando MSIL Slayembler o DLL per Lib 3.00.

WinAPI Come interfaccia di programmazione dell'applicazione per Windows offre molte potenti funzionalità che consentono di creare i tuoi programmi a partire da un semplice elaboratore di file e terminando con l'interfaccia grafica per la programmazione dei driver del dispositivo a basso livello.

Prima di iniziare la programmazione in WinAPI, è necessario configurare l'ambiente per il codice in Windows. Poiché questa non è una distribuzione Linux, non ha un compilatore integrato per creare applicazioni. Considera le seguenti opzioni per la compilazione del codice:


Un dispositivo è disponibile per Windows, che fornisce documentazione e strumenti che consentono agli sviluppatori di creare software utilizzando API e tecnologie correlate.

Interfaccia di programmazione dell'applicazione WindowsAPI (applicationProgramminginterface) è un'interfaccia di programmazione del sistema in modalità utente per una famiglia di sistemi operativi Windows. Prima del rilascio di versioni a 64 bit di Windows, l'interfaccia del programma per le versioni a 32 bit dei sistemi operativi Windows è stata chiamata API Win32 in modo che possa essere distinto dal 16 bit iniziale versione Windows API (che serviva come interfaccia di programmazione per le versioni iniziali a 16 bit di Windows).

L'API di Windows è composta da diverse migliaia di funzioni chiamate che sono suddivise nelle seguenti categorie principali:

  • Servizi di base.
  • Servicecomponents (servizi componenti).
  • Servizi interfaccia utente (Servizi di interfaccia utente).
  • Servizi grafici e multimediali.
  • Messaggi I. lavoro congiunto Messaggi e collaborazione.
  • Networking.
  • Servizi web.

Descrizione WindowsAPI può essere trovato nella documentazione per il set di strumenti di sviluppo software - WindowsSoftWareDevelopmentKit (SDK). Questa documentazione è disponibile su www.msdn.microsoft.com. È anche abilitato con tutti i livelli di abbonamento alla rete MicrosoftDeveloperNetWork (MSDN), progettati per gli sviluppatori.

Microsoft. Quadro netto. Consiste in una biblioteca di classe chiamata Biblioteca di Class Framework (FCL) e un ambiente di implementazione controllato della lingua comune runtime (CLR). CLR ha funzioni di compilazione tempestiva, controllo dei tipi, assemblaggio della spazzatura e garantendo l'accesso al codice. Offrendo queste funzioni, CLR fornisce un ambiente di sviluppo che migliora le prestazioni dei programmatori e la riduzione degli errori di programmazione più comuni.

L'ambiente CLR è implementato come server COM classico, il cui codice si trova nella libreria standard di Windows DLL progettata per funzionare nella modalità utente. In effetti, tutti i componenti .NET Framework sono implementati come windows standard Modalità utente DLL imposte in cima alle funzioni API Windows non gestite. (Nessuno dei componenti di The.NET Framework non funziona nella modalità Kernel.) La relazione tra questi componenti è mostrata nella figura.

Servizi, funzioni e programmi standard.

Alcuni termini nella documentazione dell'utente e del software di Windows in diversi contesti hanno valori diversi. Ad esempio, il servizio di parole potrebbe relazionarsi con la subroutine standard nel sistema operativo, il driver del dispositivo o il processo di manutenzione. Cosa significa esattamente quelli o altri termini, mostrato nel seguente elenco:

  • Funzioni API di Windows. DOGUNTATO, chiamato subroutines in WindowsAPI. Ad esempio, creare creatività, createfile e getMessage.
  • I propri servizi di sistema (o chiamate di sistema). Servizi di base inocchiati nel sistema operativo chiamato quando si lavora in modalità utente. Ad esempio, NTCreateUserProcess è un servizio interno che caratteristica di Windows Creazione di creazioni per creare un nuovo processo.
  • Caratteristiche del supporto del kernel (o subroutine). Sottoprogrammi all'interno del sistema operativo Windows, che possono essere causati solo dalla modalità del kernel. Ad esempio, ExallocaocatePoolwithtag è una subroutine causata da driver del dispositivo per evidenziare la memoria da sistema regioni di Windows Distributed dinamicamente (chiamate Pools).
  • Servizi Windows. Processi avviati dal Gestione dei servizi (WindowsServiceControlmanager). Ad esempio, il servizio Task Manager avvia sotto forma di un processo in esecuzione nella modalità utente in cui è supportato il comando AT (simile ai comandi UNIX AT o CRON).
  • Librerie DLL (librerie dinamiche-link - Librerie collegate dinamicamente). Un insieme di subroutine chiamate associate insieme sotto forma di un file binario, che può essere caricato nella modalità dinamica delle applicazioni che utilizzano queste subroutine. Ad esempio, è possibile portare MSVCRT.dll (Libreria orario di esecuzione per applicazioni scritte in c) e kernel32.dll (una delle librerie del sottosistema API di Windows). Le librerie DLL sono ampiamente utilizzate dai componenti e applicazioni di Windowsche funzionano in modalità utente. Il vantaggio fornito dalle librerie DLL rispetto alle librerie statiche è che possono essere utilizzate immediatamente da più applicazioni e Windows fornisce in memoria solo una copia del codice DLL per applicazioni in cui ci sono collegamenti a questa libreria. Va notato che gli sgradevoli assembly .NET sono compilati come librerie DLL, ma senza subroutine esportate. CLR analizza i metadati compilati per accedere ai tipi ed elementi appropriati delle classi.

Storia VIN32 API.

È interessante notare che Win32 non è stato pianificato come un'interfaccia di programmazione sorgente per il sistema chiamato Windows NT in quel momento. Dal momento che il progetto Windows NT è iniziato come sostituto per OS / 2 Versione 2, l'interfaccia di programmazione iniziale è stata di 32 bit OS / 2 PresentationManagerapi. Ma un anno dopo il lancio del progetto, un'esplosione è partita in vendita Microsoft Windows. 3.0. Di conseguenza, Microsoft ha cambiato la direzione e ha reso Windows NT alla futura sostituzione della famiglia prodotti Windows.e non sostituire OS / 2. A questo proposito, è stata necessaria la necessità di elaborare le specifiche API di Windows - prima di questo, in Windows 3.0, l'API esisteva solo sotto forma di un'interfaccia a 16 bit.

Sebbene nell'API di Windows, l'introduzione di molte nuove funzionalità inaccessibili in Windows 3.1, Microsoft ha deciso di creare una nuova API, il più possibile con i nomi, la semantica e i tipi di dati utilizzati con API di Windows a 16 bit per facilitare l'onere del trasferimento Windows esistente a 16 bit stampa in Windows NT. Questo, infatti, spiega il fatto che molte caratteristiche e nomi di interfacce possono sembrare incoerenti: era necessario garantire la compatibilità nuove windows. API con vecchie API di Windows a 16 bit.

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.