DOMANDA Applicazioni Win32 C

JDany

Utente Attivo
417
23
Hardware Utente
CPU
Intel Core i5 7500
Scheda Madre
ASUS H170-Pro
Hard Disk
Seagate 1 TB
RAM
Corsair Vengeance LPX 2x8 GB
Scheda Video
NVIDIA GTX 1050 Ti
Monitor
Philips Gaming Monitor 24"
Alimentatore
Corsair CX450M
Case
Sharkoon VS4-V
Sistema Operativo
Windows 10 Pro
Salve. Vorrei iniziare a studiare le Window Api per dare della grafica ai miei programmi in C.

Trovo tante guide sulle app Win32 ma quasi tutte si riferiscono a Windows XP, 7, etc.

Non uso le gtk perché è un parto installare le gtk su windows e le poche cose che so sulle API di windows mi riescono abbastanza, insomma mi sento più a mio agio con le api win.

Per quanto riguarda l'IDE uso Dev C++ (Le librerie che uso con il Dev sono aggiornate) e per il C in questo momento sto studiando gli alberi binari.
 

_Achille

Utente Èlite
3,011
694
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
L’ideale è passare a VisualStudio (DevC++ non dovrebbe manco esistere più) e imparare il C++/CLI oppure affacciarsi a C++/WinRT.

Riguardo le guide, queste ormai sono molto datate ma vanno ancora bene visto che la WinAPI non si è praticamente più aggiornata.

PS: ho ben dubbi che tu possa sentirti a tuo agio con la WinAPI. È ormai un tipo di programmazione che in progetti medio-lunghi risulta solo un parto.
 
Ultima modifica:

DispatchCode

Utente Attivo
603
363
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
Se vuoi scrivere applicazioni con GUI in C, ti consiglierei di orientarti su altro. Un esempio può essere GTK+, ma anche altre lib più specifiche per altro tipi di applicazioni (SDL2, ad esempio).

La Windows API come dice Achille non è molto comoda alla lunga. Ci ho messo mani più volte, sia utilizzando C, sia utilizzando assembly. Le guide non le trovi, la risorsa migliore è quella di Microsoft stessa; devi "solo" consultare l'API e guardarti funzioni che ricevono 5-6 parametri (a volte va peggio).

Puoi cercare "Programming Windows", che tratta la Win32API.


PS. uno dei lati negativi rimane la portabilità comunque.
 

JDany

Utente Attivo
417
23
Hardware Utente
CPU
Intel Core i5 7500
Scheda Madre
ASUS H170-Pro
Hard Disk
Seagate 1 TB
RAM
Corsair Vengeance LPX 2x8 GB
Scheda Video
NVIDIA GTX 1050 Ti
Monitor
Philips Gaming Monitor 24"
Alimentatore
Corsair CX450M
Case
Sharkoon VS4-V
Sistema Operativo
Windows 10 Pro
Se vuoi scrivere applicazioni con GUI in C, ti consiglierei di orientarti su altro. Un esempio può essere GTK+, ma anche altre lib più specifiche per altro tipi di applicazioni (SDL2, ad esempio).

La Windows API come dice Achille non è molto comoda alla lunga. Ci ho messo mani più volte, sia utilizzando C, sia utilizzando assembly. Le guide non le trovi, la risorsa migliore è quella di Microsoft stessa; devi "solo" consultare l'API e guardarti funzioni che ricevono 5-6 parametri (a volte va peggio).

Puoi cercare "Programming Windows", che tratta la Win32API.


PS. uno dei lati negativi rimane la portabilità comunque.

Sulla portabilità sono d'accordo.

Solo che le gtk mi danno un sacco di errori.. Non so quante volte ho provato a installare e sempre gli stessi errori che non so come risolverli quindi da circa un paio di mesi mi sono messo a studiare le WinApi.

Comunque SDL2 mai sentito, mi informerò a riguardo :ok:
Post automaticamente unito:

L’ideale è passare a VisualStudio (DevC++ non dovrebbe manco esistere più) e imparare il C++/CLI oppure affacciarsi a C++/WinRT.

Riguardo le guide, queste ormai sono molto datate ma vanno ancora bene visto che la WinAPI non si è praticamente più aggiornata.

PS: ho ben dubbi che tu possa sentirti a tuo agio con la WinAPI. È ormai un tipo di programmazione che in progetti medio-lunghi risulta solo un parto.
Uso Dev C++ perché lo uso da circa 1 anno e lo usiamo anche a scuola e mi trovo piuttosto bene.

Penso che dopo aver finito di studiare tutto sul C passerò al C++, che avrà i suoi problemi, ma mi semplifica molto il codice da quello che vedo online.

Comunque sono confuso: cosa intendi per CLI? Io so che sta per Command Line Interface o significa anche altro?
 

pabloski

Utente Èlite
1,976
406
Hardware Utente
Sulla portabilità sono d'accordo.

Solo che le gtk mi danno un sacco di errori..
GTK+ è ostica da installare su Windows ed effettivamente non vale la pena. Hai però dimenticato l'elefante nella stanza, ovvero Qt.

La questione API ( soprattutto in ottica GUI ) è che da un lato Win32 è ufficialmente morta. Sostituita da WinRT? Si e no. Che poi sarebbe un pezzo di quella che è nota come UWP. Il problema è che abbiamo: WPF, UWP, React Native/varie integrazione col mondo Javascript. Visto come stanno procedendo, sembrerebbero orientati addirittura verso Javascript ( hanno portato React Native su Windows ). UWP però è sviluppata, ma non gode di un eccessivo marketing nè tantomeno di uno sviluppo particolarmente veloce ( a differenza delle tecnologie basate su JS ). WPF è sostanzialmente fermo, tant'è che alcuni pensano abbia fatto la fine di MFC.

Cioè francamente un programmatore cosa dovrebbe fare esattamente? Se a loro gira di cambiare framework ogni 5 anni, non è che gli si può stare dietro.

Ed in questo contesto rientra il consiglio di studiarsi Qt e si taglia la testa al toro. Oltretutto è multipiattaforma e molto diffuso in ambito embedded/IoT ( in particolare automotive ).


Uso Dev C++ perché lo uso da circa 1 anno e lo usiamo anche a scuola e mi trovo piuttosto bene.
Dev è facile da usare, ma l'ultima release è del 2015. Non è un buon investimento per il futuro. Se vuoi qualcosa di altrettanto semplice, usa Codeblocks o Codelite. Hanno pure un designer per GUI basato sulle wxWidgets ( altra libreria multipiattaforma molto usata ).

Penso che dopo aver finito di studiare tutto sul C passerò al C++, che avrà i suoi problemi, ma mi semplifica molto il codice da quello che vedo online.
C++ offre parecchi costrutti e meccanismi in più, ma è infinitamente più complesso. Semplifica in fase di programmazione, ma padroneggiarlo è una mazzata nelle gengive.
 
  • Mi piace
Reactions: BAT00cent

fabio93

Utente Attivo
438
126
Hardware Utente
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
Hard Disk
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
Alimentatore
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
Sistema Operativo
Windows 10 Pro, Fedora 31
Salve a tutti,
mi inserisco nella discussione perché, anche se per ora non mi riguarda, questa tematica mi incuriosisce molto. Mi (e vi) domando: i software commerciali per Windows che soluzione adottano? Se alcuni (o molti) di questi usano ancora le API di Windows, come mai non c'è molta documentazione a riguardo?
 

pabloski

Utente Èlite
1,976
406
Hardware Utente
Se alcuni (o molti) di questi usano ancora le API di Windows, come mai non c'è molta documentazione a riguardo?
Ma la documentazione c'è. Nel MSDN. Non ci sono tutorial e guide per neofiti. Perchè l'API Win32 non è pensata per i neofiti.

Comunque è raro trovare software Windows che usi Win32 ancora oggi. Già ai bei tempi, si usava MFC. Poi c'è stato il passaggio a .NET con WinForms e successivamente WPF. Queste sono le tecnologie usate principalmente. Negli ultimi anni c'è stata la spinta verso il multipiattaforma e Qt ha guadagnato parecchi consensi, insieme a GTK+ e wxWidgets.

Poi ci sono soluzioni più o meno proprietarie. Per esempio Norton realizza le GUI per i suoi programmi con Sciter.

E sta prendendo piede, da un paio d'anni o poco più, Electron.
 
  • Mi piace
Reactions: fabio93 e Mursey

fabio93

Utente Attivo
438
126
Hardware Utente
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
Hard Disk
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
Alimentatore
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
Sistema Operativo
Windows 10 Pro, Fedora 31
Ma la documentazione c'è. Nel MSDN. Non ci sono tutorial e guide per neofiti. Perchè l'API Win32 non è pensata per i neofiti.

Comunque è raro trovare software Windows che usi Win32 ancora oggi. Già ai bei tempi, si usava MFC. Poi c'è stato il passaggio a .NET con WinForms e successivamente WPF. Queste sono le tecnologie usate principalmente. Negli ultimi anni c'è stata la spinta verso il multipiattaforma e Qt ha guadagnato parecchi consensi, insieme a GTK+ e wxWidgets.

Poi ci sono soluzioni più o meno proprietarie. Per esempio Norton realizza le GUI per i suoi programmi con Sciter.

E sta prendendo piede, da un paio d'anni o poco più, Electron.
Grazie per la risposta. Pensavo che i programmi con una gui dall'aspetto nativo usassero le API di Windows (anche se ad esempio Audacity usa wxWidgets e ha un look molto nativo). Forse pensavo più a programmi vecchiotti tipo (faccio nomi a caso) Nero, 3ds max, i programmi Adobe, Steinberg, e vari software freeware come Photofiltre, IrfanView, ecc, tutti accomunati dall'avere un interfaccia molto "nativa", al contrario dei programmi che usano le gtk, ad esempio, che hanno un aspetto meno nativo su Windows.
P.S.: Piccolo off-topic: per quanto riguarda Java, quale preferisci tra Swing e JavaFX? JavaFX è ancora attuale?
 

DispatchCode

Utente Attivo
603
363
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
Il .Net "sotto sotto" ha sempre richiamato funzioni dell'API di Windows (tante librerie e tanti software in realtà richiamano funzioni dell'API); ciò però non deve essere un incentivo nel creare GUI con questa API: serve 3 o 4 volte il codice che usi con Qt (oltre ad essere caotico).
Le Qt sono sicuramente tra le più utilizzate ormai.

Riguardo a Java: Swing è in realtà ormai "vecchia"; Oracle stessa consiglia l'utilizzo di JavaFX per nuove applicazioni.
 
  • Mi piace
Reactions: BAT00cent e fabio93

Andretti60

Utente Èlite
3,731
2,507
Hardware Utente
... Hai però dimenticato l'elefante nella stanza, ovvero Qt.

... WPF è sostanzialmente fermo, tant'è che alcuni pensano abbia fatto la fine di MFC. ...
Quoto, per sviluppare GUI in C direi che esistono solo due soluzioni valide, Qt e wxWidgets (non per nulla sono quelle usate per software fantastici come VLC e Audacity). E parla uno che, purtroppo, le WinAPI le mangia a merenda.

Su WPF non sono in accordo (e lo dico avendo usato anche MFC). Vero che Microsoft ne ha interrotto lo sviluppo, ma solo perché è stato ripreso da non-mi-ricordo-chi e sta andando molto forte, chi vuole realizzare applicazioni mvvm in Windows WPF è una valida alternativa e si abbina perfettamente a .NET per cui permette un facile upgrade a passi. E le GUI sono molto più facile da mantenere, hanno una estetica migliore dei banali controlli .NET e sono più flessibili. C’è una ripida curva di apprendimento, ma superata quella si va in discesa.
Post automaticamente unito:

Salve a tutti,
mi inserisco nella discussione perché, anche se per ora non mi riguarda, questa tematica mi incuriosisce molto. Mi (e vi) domando: i software commerciali per Windows che soluzione adottano? Se alcuni (o molti) di questi usano ancora le API di Windows, come mai non c'è molta documentazione a riguardo?
Chi sviluppa GUI per Windows e lo fa solo per applicazioni desktop, come il sottoscritto, la soluzione banale è C#. È un ottimo linguaggio, non è RAID come lo fu Visual Basic ma permette una produzione snella e veloce. C# ha abbastanza controlli, in genere bastano per le applicazioni semplici, se si ha bisogno di altro c’è una valanga di serie di controlli sviluppati da terze parti che sono molto ben fatti e a prezzi ragionevoli. Ma poiché C# è un linguaggio OOP, è molto facile sviluppare i propri controlli quando le applicazioni sono molto specifiche (è quello che facciamo noi). Purtroppo il paradigma di programmazione del C# è cosiddetto "vecchia scuola", ossia la classica applicazione pilotata da eventi (metti un bottone in un pannello e registri l'evento che corrisponde al click), che male si adatta ai paradigmi moderni tipo MVVM.

Tieni conto che quando si sviluppa un prodotto commerciale gli "strumenti" che si usano dipendono dal budget che si ha in modo da massimizzare il ricavato, ossia il rapporto tra vendite e il costo di produzione. E ovviamente il costo di produzione include il lavoro di chi scrive il software. Per esempio, supponiamo che per scrivere una applicazione si possa usare un prodotto già esistente, la scelta è comprare quel prodotto (ossia la licenza di uso e di distribuzione) o avere un team di programmatori che ne sviluppa uno simile. Alla fine la scelta cadrà dove la spesa è minore. Qui però il discorso si espande un po’ troppo in questa discussione.
 
Ultima modifica:

BrutPitt

Utente Attivo
140
107
Hardware Utente
Ciao.
Mi aggiungo anche io alla discussione.

Anzitutto avrai le tue ponderate motivazioni nel voler usare il C, e non il C++, per cui non cerchero' di "sedurti" per portarti dall'altra parte.
A prescindere dalla gestione nativa del Sistema Operativo (Win32, X11... etc), scegliere una GUI dipende anche dalla complessita' del progetto o dalle peculiarita' dell'applicazione che devi sviluppare.

In passato ho usato MFC (passato remoto), e wxWidgets (negli ultimi 10/15 anni, assieme a Qt), anche se sempre in C++ e per applicazioni di un certo "peso", e penso che siano comunque le scelte consigliate nel caso in cui si desideri avere una vasta gamma di funzionalita' a cui accedere, per un'interoperabilita' "multi finestra"... e tanti altri tools.
(Non mi soffermo su come potresti usare queste librerie C++ per un tuo codice puramente C)

Ma se lo scopo fosse quello di avere solo qualche widget (checkbox, listbox, button, e altri vari "semplici" controls) per poter gestire facilmente alcune variabili all'interno della tua applicazione, in quel caso esisterebbero anche altre librerie, decisamente piu' leggere, che oltretutto permettono una portabilita' multi piattaforma (analogamente a come fanno wxWidgets e Qt) non da sottovalutare.

Mi riferisco alle Immediate Mode GUI, che sono indirizzate prettamente alla programmazione grafica (DirectX/OpenGL/etc, sia 2D che 3D).
Esse vengono usate "solitamente" assieme ad un'altra libreria che gestisce le finestre e la loro interoparabilita' (come SDL2, GLFW, et similia... o anche attraverso le native funzionalita' del S.O, come Win32 o X11)

La prima, davvero "leggera" (forse troppo), scritta in C, e che appartiene alla categoria "single header library" (ossia quelle librerie che risiedono in un unico semplice header file) e' Nuklear:

https://github.com/vurtun/nuklear

Una seconda, dalle grandi potenzialita' e in attuale evoluzione, che conosco bene nella sua versione originale in C++, ma che ha un port in puro C, e' ImGui (patrocinata da Blizzard):

https://github.com/ocornut/imgui
Qui puoi vedere una serie di screenshots di come puo' anche soddisfare esigenze complesse:
https://github.com/ocornut/imgui/issues/2265
https://www.michelemorrone.eu/glchaosp/screenshots.html#osSShots

Qui c'e' il port (wrapper programmatically generated) in C, cImGui:
https://github.com/cimgui/cimgui

Ci tengo a ri-precisare che in queste librerie mancano tutte quelle funzioni di interoperabilita' tra finestre (come detto), timer asincroni, funzioni di manipolazione/open/save files (anche se ci sono alcuni widget aggiuntivi che lo fanno in ImGui), ed altri non GUI tools, che comunque puoi integrare con le funzioni native (e.g. Win32) o di terze parti.

Per cio' che riguarda l'IDE, ti hanno gia' risposto esaustivamente.
Aggiungerei solo che se volessi valutare un IDE multipiattaforma, CodeBlocks (molto facile da installare ed usare) ed Eclipse sono freeware .

Edit:
GUI portabile in puro C, mi viene in mente che c'e' anche la tcl/tk ... non la seguo piu' da diversi anni, ma ho appena visto che viene comunque aggiornata
 
Ultima modifica:

pabloski

Utente Èlite
1,976
406
Hardware Utente
Su WPF non sono in accordo (e lo dico avendo usato anche MFC). Vero che Microsoft ne ha interrotto lo sviluppo, ma solo perché è stato ripreso da non-mi-ricordo-chi e sta andando molto forte
WPF non è morto. Quello che fa rabbia è che MS continua a comportarsi come una banderuola. Capisco l'hype su Electron e compagnia, ma perchè diavolo dare priorità a Javascript? Capisco anche l'hype su React native, ma questo non giustifica mandare il segnale che è la tecnologia preferita. Da quanto hanno lanciato UWP, sembra che vogliano che tutti sviluppino in Javascript. Siete moderni, Nadella è rock e Ballmer era lento..ok, ma è una cazzata colossale, visto quanto avanzato è WPF rispetto alla tecnologia JS-based du jour. Cioè tu hai un framework eccezionale ( diciamocelo pure, nonostante odi MS da almeno 20 anni buoni ) e ti vai ad infognare in Javascript? Contenti loro.

Per fortuna ( o sfortuna, si vedrà ) l'hanno reso opensource https://github.com/dotnet/wpf

A questo punto, se la comunità veramente è interessata, lo farà esploderà in termini di attività di sviluppo ed utilizzo ( e mi piacerebbe davvero tanto avere un competitor di Qt all'altezza ). Purtroppo, in passato, altre iniziative simili ( non di MS ) hanno portato alla morte di una tecnologia. E spero vivamente che non accada. Poter usare C#/WPF su Linux sarebbe il non plus ultra.
Post automaticamente unito:

GUI portabile in puro C, mi viene in mente che c'e' anche la tcl/tk ... non la seguo piu' da diversi anni, ma ho appena visto che viene comunque aggiornata
La usano i pythonisti in buona misura. Però è complessa. Se si deve affrontare quel tipo di curva di apprendimento, molta gente va dritta su Qt.
 

Entra

oppure Accedi utilizzando