• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Info Programmazione linguaggio C per Windows 32 utilizzando le API e la GUI

Axel Axelev

Nuovo utente
Autore del topic
2 Aprile 2014
11
0
Miglior risposta
0
Salve a tutti,
mi offro volontario per la scrittura e la realizzazione di alcuni tutorial in C utilizzando la GUI e le API di windows. Ho visto in giro, molte persone che chiedono tutorial al riguardo. In particolare per quanto riguarda l'utilizzo delle API di Windows e come fare a creare una GUI.
Per questo ho deciso di condividere con voi la mia conoscenza al riguardo, sperando di poter aiutare qualcuno.
Saluti a Tutti
il vosto Axel:emoji_slight_smile:
 
Salve a tutti,
mi offro volontario per la scrittura e la realizzazione di alcuni tutorial in C utilizzando la GUI e le API di windows. Ho visto in giro, molte persone che chiedono tutorial al riguardo. In particolare per quanto riguarda l'utilizzo delle API di Windows e come fare a creare una GUI.
Per questo ho deciso di condividere con voi la mia conoscenza al riguardo, sperando di poter aiutare qualcuno.
Saluti a Tutti
il vosto Axel:emoji_slight_smile:
Ciao cerco pure io questa guida! In questo topic però non vedo nè video nè niente :emoji_relieved:
Ti do tempo 24h per postarlo ;)
 
Ciao cerco pure io questa guida! In questo topic però non vedo nè video nè niente :emoji_relieved:
Ti do tempo 24h per postarlo ;)

Ok!

Allora salve a tutti, qui inizierò la prima lezione su win32 e GUI.
Prima di tutto io do per scontato la vostra conoscenza del C, almeno i concetti generali e passerò direttamente a parlare di Windows e delle sue API.
Infatti una interfaccia grafica è basata su alcune chiamate a delle API di windows...ma probabilmente tutti vi state chiedendo " ma che diavolo è un API????"
API è l'abbreviazione di "Application Programming Interface", ovvero un insieme di funzioni scritte in C e assembly che servono alla programmazione di Windows. Eravamo un po' tutti stanchi delle singolarità degli interrupts montate sulle varie architetture....
Seppur scritte in C e assembly, i parametri di queste "funzioni" spesso non corrispondono con i tipi standard del C.. esempio DWORD che diavolo è?????
Double word quindi definisce un intero a 4 bytes in questo caso in c corrisponde ad un unsigned (long) int...ora non c'è bisogno che vi impariate a memoria tutte queste definizioni...anche se può servire ahaha

Windows MSDN ci fornisce 3 utilissimi link per poter semplicemente tradurre tutte queste nuovi tipi, in tipi già conosciuti
WINDOWS DATA TYPE:
Perfavore, Entra oppure Registrati per vedere i Link!


WINDOWS DATA TYPE FOR STRINGS (ne parleremo in seguito di questo link)
Perfavore, Entra oppure Registrati per vedere i Link!


DATA TYPE RANGES
Perfavore, Entra oppure Registrati per vedere i Link!


Ok adesso che conosciamo i tipi di dato su cui andremo a lavorare, possiamo iniziare.
PREMESSA
Io in questa serie di tutorial userò CODE:BLOCKS come IDE , GCC come compilatore senza settaggi particolari, e il C99 come standard del c

Ho visto che già c'è un link per il download degli ide ma per sicurezza ve lo allego di nuovo
Perfavore, Entra oppure Registrati per vedere i Link!


Allora apriamo il nostro fido code:block e facciamo Nuovo->Progetto e scegliamo Win32 GUI Project
a questo punto il nostro amato ci chiederà "Dialog based" o "Frame based", noi sceglieremo Dialog based.
Assegneremo un nome al nostro progetto, io l'ho chiamato Hello World.
A questo punto vedremo che code blocks ha creato per noi già una GUI ma essa è vuota e se la compiliamo e la alnciamo (premere F9)
apparira una console e una finestra di dialogo con solamente un titolo Dialog......
Allora prima cosa da fare è eliminare la Console..e questo va fatto dalle opzioni del progetto, ecco come: Progetto->proprieta scegliete il tab build targets e come tipo selezionate GUI application.
Se ricompilate il progetto vedrete che la console non appare più:emoji_relieved:
Ottimo a questo punto noi vogliamo mettere un bottone che quando lo clicchiamo ci apre un messaggio con scritto "la mia prima GUI".
Allora per prima cosa rechiamoci nel file resource.rc
e aggiungiamo DEFPUSHBUTTON "Cliccami", IDOK, 65, 40, 50, 14 all'interno di
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
A questo punto abbiamo aggiunto un controllo bottone, andiamo nel file main.c e iniziamo a gestire il nostro bottone.
Dovreste vedere una funzione callback, questa è una funzione che viene passata come parametro ad un'altra funzione e serve per gestire gli eventi, come la pressione di un bottone nella form o il click del mouse...
dovreste vedere uno snippet di codice
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

li dentro aggiungiamo un nuovo caso,ovvero la pressione del nostro bottone e all'interno del caso creiamo un nuovo evento che gestisce la pressione del bottone...esso crerà la MessageBox.
per quanto riguarda la MessageBox essa è una funzione di windows che accetta 4 parametri

int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);

il primo parametro è un Handle al possessore della finestra di dialogo
il secondo e il terzo parametro sono dei long pointer ad una stringa costante di caratteri...si possono tradurre in c con "const char[]*"
il quarto parametro è un uint ovvero in c un unsigned int, e rappresenta i bottoni all'interno del messageBox
questo è il link di MSDN

MessageBox Function
Perfavore, Entra oppure Registrati per vedere i Link!


inoltre qui potrete trovare la lista completa dei controlli da usare nelle varie finestre di dialogo

Resource-Definition Statements
Perfavore, Entra oppure Registrati per vedere i Link!


e infini vi allego il codice completo

main.c
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

resource.h

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

resource.rc

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

con questo direi di aver concluso il mio primo tutorial sulle GUI
il vostro Axel Axelev

- - - Aggiornato - - -

Salve a tutti!!!
Dopo aver scritto il rpimo esempio di windows form continuo la mia serie di tutorial sulle GUI
e vi introduco un nuovo controllo che sono sicuro troverete utilissimo...la "textbox" come molti la chiamano,
soprattutto per quelli che vengono dalla piattaforma .NET, ma più conosciuta come EDITTEXT per i "vecchioni" come me :emoji_slight_smile:


Allora oggi creeremo un contatore
1 textbox e 2 bottoni, uno per incrementare e uno per decrementare e un label

useremo queste 3 API:

GetDlgItemInt function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645485(v=vs.85).aspx
SetDlgItemInt function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645518(v=vs.85).aspx
wsprintf function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms647550(v=vs.85).aspx

ok iniziamo

per prima cosa modificheremo il file resource.rc e aggiungeremo:

DLG_MAIN DIALOG 0, 0, 100, 95 /* modifico la finestra di dialogo */

DEFPUSHBUTTON "Incrementa", IDIN, 30, 35, 40, 14 /* bottone per l'incremento */
DEFPUSHBUTTON "Decrementa", IDDC, 30, 49, 40, 14 /* bottpme per il decremento */
EDITTEXT 102, 50, 10, 20, 14 /* la casella di testo */
LTEXT "Contatore:", 101, 10, 10, 40, 14 /* ho aggiunto un label per far capire cosa succede*/

Adesso modificheremo il file resource.h
aggiungendo queste definizioni

#define IDIN 98
#define IDDC 99

e adesso siamo pronti per passare alla parte del codice andiamo nel file main.c

dichiaro una variabile globale e la inizializzo a 0:
UINT contatore = 0;

a questo punto avremo bisogno di una funzione che incrementa il contatore e di una che lo diminuisce e inoltre di un altra funzione,
ovvero quella che setti il valore nella casella di testo

per prima cosa scriviamo la funzione che setta il valore nella casella di testo
useremo l'API SetDlgItemInt
come vediamo da MSDN questa funzione accetta 4 parametri:
l'HANDLE alla finestra di dialogo che contiene la casella di testo.
il valore della casella di testo, questa è una costante che identifica la casella di testo.
il valore che vogliamo impostare.
l'ultimo parametro specifica se il valore d amostrare deve essere con o senza segno(nel nostro caso lo imposteremo su 1 ovvero vero)

quindi ecco la nostra funzione:

void setvalue(HWND hDialog){
SetDlgItemInt(hDialog,102,counter,1);
}


allego adesso il codice completo!



Salve a tutti!!!
Dopo aver scritto il rpimo esempio di windows form continuo la mia serie di tutorial sulle GUI
e vi introduco un nuovo controllo che sono sicuro troverete utilissimo...la "textbox" come molti la chiamano,
soprattutto per quelli che vengono dalla piattaforma .NET, ma più conosciuta come EDITTEXT per i "vecchioni" come me :emoji_slight_smile:


Allora oggi creeremo un contatore
1 textbox e 2 bottoni, uno per incrementare e uno per decrementare e un label

useremo questa API:

SetDlgItemInt function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645518(v=vs.85).aspx


ok iniziamo

per prima cosa modificheremo il file resource.rc e aggiungeremo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Adesso modificheremo il file resource.h
aggiungendo queste definizioni

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

e adesso siamo pronti per passare alla parte del codice andiamo nel file main.c

dichiaro una variabile globale e la inizializzo a 0:
UINT contatore = 0;

a questo punto avremo bisogno di una funzione che incrementa il contatore e di una che lo diminuisce e inoltre di un altra funzione,
ovvero quella che setti il valore nella casella di testo

per prima cosa scriviamo la funzione che setta il valore nella casella di testo
useremo l'API SetDlgItemInt
come vediamo da MSDN questa funzione accetta 4 parametri:
l'HANDLE alla finestra di dialogo che contiene la casella di testo.
il valore della casella di testo, questa è una costante che identifica la casella di testo.
il valore che vogliamo impostare.
l'ultimo parametro specifica se il valore d amostrare deve essere con o senza segno(nel nostro caso lo imposteremo su 1 ovvero vero)

quindi ecco la nostra funzione:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


allego adesso il codice completo!
questo è il file main.c
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

questo è il file resource.h

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

questo è il file resource.rc

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Immagine Contatore:
Perfavore, Entra oppure Registrati per vedere i Link!

immagine contatore 2:
Perfavore, Entra oppure Registrati per vedere i Link!
 
Ultima modifica:
  • Like
Reactions: 1 person