2012-03-15 2 views
20

Innanzitutto, so che questo è un tipo di domanda comune, ma non sono riuscito a trovare la risposta esatta che sto cercando.Moderna e nativa modalità di creazione di app GUI WinAPI in C++

Ho eseguito molti progetti in Java utilizzando Swing. A partire dalla semplice codifica della GUI, per poi passare ai progettisti della GUI. Questo è risultato essere un molto modo semplice e veloce per creare app GUI.

Ma ora ho bisogno di passare a C++. Sto iniziando un progetto che usa molte risorse HW (DirectX, OpenCV, ecc ...) So che ci sono librerie Java per queste tecnologie. Tuttavia, C++ è sicuramente la strada giusta da percorrere, considerando gli interni di questo progetto.

Conosco bene i linguaggi C e C++ dalla programmazione MCU. Inoltre, ho letto molti articoli sulla programmazione nativa di WinAPI, interni di Windows, ecc. Penso di avere abbastanza conoscenze per iniziare. Non voglio preoccuparmi molto del design della GUI, ma deve sembrare appropriato.

So che ci sono poche opzioni di base: Pure WinAPI, MFC, WTL, Qt ... Sarei molto felice se ci fosse un qualche tipo di strumento di progettazione GUI, ma dalla mia ricerca, non c'è. C'è la procedura guidata MFC che aiuta a creare una finestra di base, ma non è un designer. La cosa più vicina che ho trovato era Qt. Ma da quello che ho letto, non sta usando WinAPI per disegnare, perché in futuro l'aspetto dell'app di Qt può differire dall'aspetto nativo di Windows.

Quindi, per riassumere, per favore, se hai esperienza con la creazione di app native di Windows C++ con GUI, cosa mi consiglieresti? In particolare, c'è qualche strumento o designer che ho perso?

(sto usando Visual Studio 2010 Professional, dal momento che ho gratuitamente grazie al progetto DreamSpark)

+0

Davvero non a meno che tu non sia un ghiottone per punizione ... usa MFC. –

+6

In realtà sono piuttosto sorpreso del fatto che il "mondo" sia passato a soluzioni di codice gestite e fondamentalmente interrotto lo sviluppo di GUI nativi ... C'è ancora il campo in cui il nativo è il modo migliore per andare ... –

+0

Se ti piace conformarti allo stile e alle interfacce di codifica di Microsoft, utilizzare MFC. Altre GUI popolari sono QT e wxWidgets. Se sei davvero aggressivo ed efficiente, usa l'API di Windows nativa (molto doloroso). –

risposta

9

Recentemente ho usato Qt4 ed ero molto soddisfatto dell'API. L'ho trovato semplice, ben documentato e il codice è estremamente conciso.

Qt fa un ottimo lavoro di emulare l'aspetto del sistema operativo di destinazione e la sensazione (come @In silico sottolineato nei commenti, Qt in realtà attira tutto se stesso e fa componenti nativi non uso) Indipendentemente da ciò, questo può essere codificato da mano o visivamente attraverso l'editor della GUI nel loro IDE, Qt Creator. Se segui questo percorso, ti consiglio di creare il tuo progetto GUI iniziale (file .pro), quindi di importarlo in Visual Studio tramite Qt Visual Studio Add-In.

Slots and signals, Qt's event/sistema di messaggistica, è anche la pena menzionare. Sì, è fondamentale per la programmazione della GUI, ma potrebbe anche essere estremamente utile nel codice di livello inferiore.

Mi aspetto che Qt funzioni bene nel progetto, ma come sempre, creare alcuni semplici test per garantire che le tecnologie funzionino insieme in modo fattibile.

+0

Sì, QT è il migliore di un brutto gruppo. : D – 111111

+1

@zourtney: Tecnicamente non usa componenti nativi, disegna tutto da solo. Sembra nativo perché utilizza le API del sistema operativo per ottenere informazioni sul tema del sistema. –

+1

@In silico, Ack! Grazie ... sembra che sia saltato alle conclusioni quando ho letto i documenti qualche mese fa. Risposta modificata ... –

3

È possibile utilizzare la C++Builder XE2 (parte del Rad Studio IDE), che comprende il VCL (Visual Component Library), il VCL è un wrapper sui controlli di Windows (e include anche controlli personalizzati) che aumentano la produttività dello sviluppo.

1

A seconda della rigorosità della definizione, è possibile utilizzare .NET Windows Form o Windows Presentation Foundation e collegare la logica in C++, C++/CLI e C#. Questa non sarebbe una pura soluzione C++. In realtà, non consiglierei nemmeno l'uso del C++ in quella situazione. Semplicemente usando C# sarebbe più intuitivo e manutenibile. WinForms e WPF hanno però dei fantastici designer di GUI.

3

Ecco alcuni suggerimenti:

  • non ci si bloccano in C++. C# e Java (ad esempio) possono essere facilmente interoperabili con C/C++. (Tramite PInvoke o C++/CLI per la prima e JNI per la successiva). C++ potrebbe non essere la lingua ideale per scrivere rapidamente una GUI.

  • Il requisito per "windows native look" è arbitrario e dovresti pensarci sopra. E 'davvero quello di cui hai bisogno?

  • Winforms. È una tecnologia obsoleta ma è ancora ampiamente utilizzata. Si utilizza l'API da C++/CLI o C# (o qualsiasi linguaggio .NET).

  • WPF, un'API più recente, ma che sarà più difficile da affrontare da C++, (meglio con C# o VB)

  • Uno dei tanti GUI toolkit disponibili sul mercato che hanno un C o C++ API (QT, GTK, wxWidgets, VCL, ... list here). Alcuni hanno un aspetto "nativo", altri no.Alcuni hanno designer che altri no. Alcuni sono gratuiti, altri no.

+1

Posso parlare solo per C#: Interops può essere un brutto affare. Soprattutto come non è possibile restituire un valore marshalling, in modo da gestire i puntatori e semplicemente tramite 'IntPtr's, quindi è necessario ricordare/commentare i tipi, allocare e liberare memoria, usare una copia statica, ecc. Lavorando solo con un l'elenco delle stringhe è stato abbastanza fastidioso per me e questo è solo due livelli di indicatori.Anche il C++ ha un mangling dei nomi che può confondere i nuovi arrivati, devi abbinare le convenzioni di chiamata, abbinare l'architettura della cpu, ecc. Ecc. Posso essere d'accordo sul fatto che quando si lavora con le primitive non è affatto male, anche molto molto facile. – MasterMastic

3

Se hai bisogno di un'interfaccia utente semplice, ti consiglio di usare WTL - è una libreria semplice, leggera, di sola intestazione, ottimo wrapper su WinAPI. In Visual Studio è possibile utilizzare la progettazione di moduli per la creazione di finestre e l'uso di classi WTL per l'interazione con l'utente. Il WTL ha una documentazione scarsa, ma WTL assomiglia all'MFC.

Se vuoi ricche possibilità ti consiglio di usare Qt. È un framework GUI molto potente con una grande community.

+0

Consiglierei anche WTL. È molto moderno, la versione 9 è stata rilasciata nel 2014 –

2

VCL è un buon modo per andare. Ha uno strumento di progettazione GUI (Embarcadero Rad Studio XE6) sviluppatore completamente nativo per C++ e Delphi