DOMANDA Applicazioni Win32 C

JDany

Utente Attivo
461
24
CPU
Ryzen 9 3900x
Scheda Madre
ASUS H170-Pro
RAM
Corsair Vengeance LPX 2x8 GB
GPU
ZOTAC RTX 3070 TWIN EDGE OC
Monitor
Philips Gaming Monitor 24"
PSU
Corsair CX450M
Case
Sharkoon VS4-V
OS
Windows 11 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,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
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

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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
461
24
CPU
Ryzen 9 3900x
Scheda Madre
ASUS H170-Pro
RAM
Corsair Vengeance LPX 2x8 GB
GPU
ZOTAC RTX 3070 TWIN EDGE OC
Monitor
Philips Gaming Monitor 24"
PSU
Corsair CX450M
Case
Sharkoon VS4-V
OS
Windows 11 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 unito automaticamente:

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
2,868
916
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
Reazioni: BAT

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
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
2,868
916
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
Reazioni: fabio93 e Mursey

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
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

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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
Reazioni: BAT e fabio93

Andretti60

Utente Èlite
6,440
5,091
... 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 unito automaticamente:

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
1,166
1,262
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
2,868
916
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 unito automaticamente:

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
Discord Ufficiale Entra ora!

Discussioni Simili