2009-12-05 17 views
15

Sono una nuova GUI e programmazione nel suo complesso e finora ho una conoscenza generale di c e ho trascorso un po 'di tempo a scrivere le applicazioni della console.Introduzione alla programmazione della GUI con c

Sto cercando di imparare la GUI, ma finora non ho avuto successo. Ho provato ad imparare wxwidgets (attraverso la documentazione ufficiale), gtk (attraverso la documentazione ufficiale) e win32 (forgers win32 tutorial) ma non ci sono ancora arrivato.

Voglio ancora ma non riesco a trovare alcun materiale valido. Cosa consiglieresti come inizio per un principiante?

+1

Quanto è rigoroso l'utilizzo di C? È possibile parlarti dell'uso del C++? –

+0

Hang in là, rispetto ad alcune lingue, scrivere GUI in C non è facile. –

risposta

15

Se sei strettamente limitato a C, hai solo poche scelte. GTK + è probabilmente il più facile per un principiante.

Un linguaggio orientato agli oggetti come C++ è molto più adatto alla programmazione GUI. Se ti piace usare C++, ti consiglio vivamente lo Qt, principalmente per la sua ottima documentazione, con un ottimo tutorials soprattutto per i principianti.

+3

-1, dato che la domanda menziona aver provato gtk, raccomandando gtk è ridondante senza offrire suggerimenti su come rompere quel dado. Anche raccomandare di cambiare lingua è fuori questione. Le lingue OO non sono più adatte alla programmazione GUI perché OO è solo una pratica di progettazione, non una magia che è disponibile solo in alcune lingue. – mlibby

+0

Davvero. Quindi pensi che C sia adatto anche alla programmazione GUI? Vai avanti e programma le tue GUI in C, non ti trattengo. Allora, qual è la tua raccomandazione per un principiante che vuole fare qualche programmazione GUI? – hirschhornsalz

+0

Gtk +. Come puoi vedere dalla mia risposta. Non so perché Sil3nt abbia scelto C (apparentemente su Windows), ma lui/lei deve avere delle ragioni. Penso che l'insistenza su una lingua piuttosto che un'altra distrae. Se la scelta della lingua è davvero una questione aperta a questo punto, suggerirei C# come il modo migliore per un programmatore di Windows di entrare nella programmazione della GUI. – mlibby

0

mi consiglia Cimg library che è open source e molto completo di uso in 2'D interfaccia e immagine grafica elaborazione:

La biblioteca CImg è una fonte C++ aperta toolkit per l'elaborazione delle immagini progettata con queste proprietà in mente: Utilità CImg definisce semplici classi e metodi diretti a manipolando immagini generiche nel proprio codice C++ : Carica/salva vari file formati, accesso valori di pixel, display, ridimensiona/ruota/specchio/filtro, disegna primitive (testo, volti, curve, 3D oggetti, ...), statistiche di calcolo, gestisci interazioni utente e così via ... Generità fornita le classi di immagini possono rappresentare set di dati fino a 4 dimensioni di larghezza (dai segnali scalari 1D ai volumi di hyperspectral 3D ), con i tipi di pixel modello . Sono inoltre supportate le raccolte di immagini e le sequenze . Portability CImg è autonomo e quindi altamente portatile. Completamente funziona su diversi sistemi operativi (Unix, Windows, MacOS X, * BSD) con vari compilatori C++ (Visual C++, GNU g ++, Intel icc, Borland bcc, ...). Simplicity CImg è leggero. È costituito da un singolo file di intestazione CImg.h che deve essere incluso nella sorgente C++ . Definisce solo quattro diverse classi . Può essere compilato utilizzando un set minimo di C++ standard e le librerie di sistema del sistema . Nessuna necessità di dipendenze esotiche o complesse. Estensibilità Anche se non richiesto, CImg può utilizzare funzionalità di esterni strumenti/librerie, come ImageMagick, GraphicsMagick, XMedCon, FFMPEG, libpng, libjpeg, libtiff, Magick ++, LAPACK, Consiglio, OpenEXR o fftw3. Inoltre, un semplice meccanismo di plug-in consente a qualsiasi utente di migliorare direttamente le funzionalità della libreria in base alle sue esigenze . Freedom CImg è una libreria open source gratuita, distribuita sotto il CeCILL-C (vicino alla GNU LGPL) o CeCILL (compatibile con le licenze GNU GPL). Può essere utilizzato nelle applicazioni commerciali .

This is document for Cimg.

+0

Votato perché muro di testo. E l'open source a volte non è il modo migliore per iniziare a leggere il codice. Può darti una prospettiva distorta di come dovrebbe essere il vero software scritto. – Chad

+0

@Chad Cimg è la libreria grafica più semplice che io veda. Vedi la biblioteca di Cimg ancora? – SjB

+1

@chad e in quale altro modo suggerisci di imparare quale dovrebbe essere il vero software scritto? Almeno con l'open source, la lettura del codice è un'opzione. Leggere qualsiasi codice è meglio che avventurarsi nel vuoto e dover capire tutto da zero o semplicemente usando esempi banali di libri ed esercitazioni. – mlibby

4

Io suggerirei si dovrebbe cercare di imparare un po 'di programmazione orientata agli oggetti correttamente con un linguaggio come Objective C o C++, dal momento che la programmazione GUI è difficile. In particolare, a maggior ragione in C.

Molti dei concetti di programmazione GUI ruota su di te sapendo come oggetti di lavoro, con tutte le widget che sono composte in qualsiasi quadro GUI, e come interagiscono tra loro. C'è anche il concetto di eventi che invia messaggi da una sorgente di input a un componente grafico (o tra due componenti grafici).

In sintesi: diventa molto più facile da leggere attraverso la documentazione quando si sa che gli oggetti sono tutti su ... e anche allora c'è molto da prendere in

1

lettura di un libro solo si ottiene finora. . Per portarlo al livello successivo devi solo sperimentare ciò che l'API può fare. Sebbene si possa ottenere tutto il livello dell'API Win32 per la propria GUI, ma se si sta appena partendo concentrarsi solo sul provare diverse tecniche.

Scoprirai presto cosa funziona e cosa non funziona.

Se consiglierei un libro, consiglierei un libro non tecnico.

Design Of Everyday Things

successivo è un post fusione video, sulla panoramica più psicologico di progettazione di una GUI e come rendere gli utenti e felici.

Business of software - Joel Spolsky

ultimo, questo libro vi aiuterà a capire che, quando si esegue applicazioni di progettazione che le persone vedranno le vostre decisioni e scelte asthetic tramite i propri valori della cultura. Quindi, è importante scegliere un tema di design estetico per la vostra applicazione e attenervisi.

The Culture Code

1

La cosa da sapere è che GUI non è integrato in C (come hai senza dubbio già scoperto), ma è avvitato in via varie librerie. wxWindows, qt, gtk e, naturalmente, i VCL sono i giocatori principali. Mentre fanno tutti cose simili, sono tutti diversi nei dettagli.

È importante sapere che se dovessi programmare in C++, avresti accesso ad alcuni wrapper orientati agli oggetti a queste e ad altre librerie che potrebbe rendere la tua vita un po 'più semplice. "plain" C è talvolta considerato "vecchia scuola" a volte e il supporto non è altrettanto "vivace", anche se le librerie GUI esistenti sono eccellenti.

Quello che consiglio è di navigare nella 'rete' per descrizioni e confronti di librerie GUI e valutare i risultati rispetto alle proprie esigenze personali. Le tue cose gireranno solo su Windows o ti piacerebbe che fosse multipiattaforma? La licenza è un problema? Vuoi piccolo e semplice (e forse non così sexy) o vuoi che la GUI finisca tutte le GUI?

Dopo aver scelto un vincitore, eseguire esercitazioni o esempi online.Se riesci a coglierne l'essenza e se riesci a programmare nello stile richiesto, prendi un libro dell'albero morto per apprenderlo in profondità e comprenderlo in dettaglio.

2

Se si desidera imparare la programmazione GUI su Windows in C, la buona notizia è che l'API nativa è basata su C. La cattiva notizia è che l'API nativa non è esattamente un modello di chiarezza e coerenza. È molto più semplice iniziare con un framework OO basato su tale API.

Detto questo, se vuoi ancora imparare la programmazione di Windows GUI in C, la soluzione migliore è la Programming Windows di Petzold. Ti insegnerà la programmazione Windows in generale, comprese tutte le cose della GUI, usando l'API nativa.

5

Non suggerirei di provare a fare GUI con C. Non è proprio così comodo farlo.

Ma se proprio vuoi farlo. Ecco un bel tutorial su Windows API.

È anche possibile utilizzare una libreria come Allegro, è destinata ai giochi, ma può essere ugualmente utile nei programmi.

Ma il modo in cui vorrei suggerire è, in primo luogo, apprendere le nozioni di base della GUI e dell'applicazione (che significa macchina a stati) programmando con un linguaggio semplice (qualsiasi operazione semplice, personalmente suggerirebbe Lua con la piattaforma Löve2D). E poi usa la conoscenza che hai ottenuto in C. La macchina di stato e il flusso di eventi saranno più difficili da capire se devi gestire la raccolta dei rifiuti e i puntatori ... (è ancora possibile imparare).

+0

-1 perché la domanda non era se la GUI dovesse essere eseguita in C, ma come iniziare. Esiste un'abbondanza di software di qualità scritto in C che utilizza Gtk + che funziona su più piattaforme. – mlibby

+1

+1 La domanda include "Cosa consiglieresti come inizio per un principiante?" Pertanto è perfettamente un buon consiglio dare un avvertimento oltre a dare una valida risposta al resto della domanda. – Dipstick

+0

@mcl: So che c'è molto software scritto in GUI in C. Esistono anche applicazioni GUI scritte in asm. Ma non penserei che sarebbe il modo migliore per cercare di imparare la GUI. Penso che per i principianti l'apprendimento della GUI prima con qualcosa come Lua (come la piattaforma Löve2D) sarebbe più vantaggioso in quanto non dovresti preoccuparti di gc, puntatori e altre cose simili. Quando si conosce il modello di evento/stato di base per le GUI, procedere è più semplice. – Egon

2

Ho intenzione di raccomandare di andare a indietro a a gtk + e a provare di più. Perché?

Perché è disponibile una vasta gamma di software open source per Linux e Windows scritti in C utilizzando le librerie gtk + per la GUI. Da applicazioni di grandi dimensioni come GIMP e GnuCash, a strumenti più piccoli, è disponibile il codice sorgente che puoi leggere per scoprire come ottengono determinate imprese. Se stabiliscono il miglior esempio di come realizzare qualcosa è un'altra domanda, ma almeno hai il vantaggio di vedere come funziona il software di lavoro.

Inoltre, gtk + include glib, che è uno strumento utile da avere a disposizione per gestire strutture e algoritmi di dati comuni. Quindi, invece di passare il tempo a implementare elenchi collegati e cose del genere, puoi semplicemente usare quelli della libreria e il tuo tempo di codifica è dedicato a risolvere i tuoi enigmi particolari.

La documentazione di Gtk + non è perfetta, ma è accettabile. C'è anche uno mailing list per gli sviluppatori di app.

+1

insieme a GTK +, è possibile utilizzare Glade3 interface designer tool. Puoi costruire il tuo modulo GUI semplicemente trascinando e rilasciando i widget. Glade genera un file .glade che può essere importato nel tuo codice C. Per maggiori informazioni vai su http://glade.gnome.org/ – atv

1

+1 per GTK. Se sei obbligato ad usare C, sia per tua scelta che per i requisiti del tuo progetto, ti conviene fare di meglio di GTK +. QT è principalmente C++, quindi se C++ è ok questa è un'opzione. Ma i documenti per GTK + non sono così male come i progetti open source, e c'è un sacco di codice di esempio là fuori da guardare.

Se avete una scelta di lingue di commutazione ci sono altre opzioni Cocoa è un ambiente di programmazione GUI eccellente sul Mac (non ho mai provato Cocoa per Windows, ma ho sentito che è possibile.) e Objective-C si presta bene alla programmazione GUI.

1

Ti suggerisco di studiare anche su Event Driven Programming. In molti programmi GUI, il programma principale attende che un evento, come un clic del mouse, accada e quindi elabora l'evento. La programmazione di guida degli eventi è molto diversa dalla programmazione di Esecuzione sequenziale.

Altri argomenti da studiare sono la programmazione multi-thread e multi-task. Molti oggetti GUI (widget) come un pulsante, passano messaggi ad altri oggetti; o trasmesso a tutti gli ascoltatori. Il passaggio dei messaggi è un processo comune nella programmazione multi-thread e multi-task.