Ciao cerco pure io questa guida! In questo topic però non vedo nè video nè niente
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:
WINDOWS DATA TYPE FOR STRINGS (ne parleremo in seguito di questo link)
DATA TYPE RANGES
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
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ù

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
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
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
inoltre qui potrete trovare la lista completa dei controlli da usare nelle varie finestre di dialogo
Resource-Definition Statements
e infini vi allego il codice completo
main.c
resource.h
resource.rc
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
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
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:
Adesso modificheremo il file resource.h
aggiungendo queste definizioni
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:
allego adesso il codice completo!
questo è il file main.c
questo è il file resource.h
questo è il file resource.rc
Immagine Contatore:
immagine contatore 2: