Grafica sotto Windows

di il
12 risposte

Grafica sotto Windows

Buongiorno a tutti voi.

Dato che in questo periodo ho parecchio tempo (5/6 ore al giorno) da dedicare alla programmazione, ho deciso di approfondire la programmazione grafica in ambiente Windows e un paio di mesi fa mi sono imbattuto in rete nel libro di Charles Petzold, Programming Windows, sulle API Win32, che nonostante i suoi anni (l'ultima edizione è del 2002) mi sembra ancora il punto di riferimento per questi argomenti - preferisco un libro al sito dedicato della MS https://learn.microsoft.com/en-us/windows/win32/ - e non mi spaventano affatto né la mole né il suo contenuto (nonostante richieda molto tempo, appunto). (Per inciso, sto anche approfondendo il lato più multimediale attraverso le SFML).

La mia domanda è: vale ancora la pena imparare queste librerie a basso livello, se così si può dire, o è preferibile orientare l'attenzione verso librerie più ad alto livello come Qt, ad esempio? Naturalmente il mio interesse è principalmente sui  linguaggi C/C++. Per motivi didattici avevo usato un po' anche C#, ma mi piace di più gestire direttamente tutto il codice.

12 Risposte

  • Re: Grafica sotto Windows

    A parte la conoscenza personale (per cui vale sempre la pena studiare dal Petzold), ti consiglio di usare librerie pronte per C/C++ e multipiattaforma (anche per Linux).

  • Re: Grafica sotto Windows

    13/12/2022 - euscar ha scritto:


    La mia domanda è: vale ancora la pena imparare queste librerie a basso livello, se così si può dire, o è preferibile orientare l'attenzione verso librerie più ad alto livello come Qt, ad esempio? Naturalmente il mio interesse è principalmente sui  linguaggi C/C++. Per motivi didattici avevo usato un po' anche C#, ma mi piace di più gestire direttamente tutto il codice.

    La domanda dipende sempre dall'obiettivo che si intende raggiungere.

    Ad esempio, da sviluppatore software indipendente (ISV), utilizzando Delphi (ma vale lo stesso discorso per Visual Studio) non ho alcun interesse da parte mia nel dovermi sobbarcare per ogni app da realizzare l'onere di invocare le API necessarie a creare una tipica interfaccia grafica per Windows (ma lo stesso discorso in realtà vale anche per altri sistemi operativi), inclusiva di menu, toolbar, controlli principali e così via.

    Se da un lato la conoscenza delle API è indispensabile per arrivare là dove non arriva il tool RAD usato per lo sviluppo, salvo necessità molto particolari, in termini di produttività studiarsi tutte le API e scriversi interamente il codice per creare una interfaccia utente è un tempo che non posso permettermi in quanto sottrae concentrazione allo sviluppo molto più importante e rilevante della parte della logica di business, che se fosse impiegato anche per l'architettura elementare dell'applicazione, non farebbe altro che levitare tempi e costi e porre fuori mercato la mia consulenza o fornitura del software stesso.

    Se invece l'interesse è accademico, oppure si tratta di un percorso forzato dai tool che si vogliono utilizzare, oppure se c'è un reale motivo alla base della scelta (tecnico, s'intende), allora ben venga la scelta di scrivere interamente il codice dell'applicazione, ivi compreso ciò che si può automatizzare in qualche modo, come la realizzazione di una interfaccia utente.

    Tu dici “mi piace di più gestire tutto il codice”… ok, se ti piace di più, fallo. Perché no?
    Se dovessi lavorare su software commissionato e ciò non avrebbe un vantaggio particolare, ti direi che sarebbe insensato (o quantomeno rischierebbe di porti fuori dal budget o dalle tempistiche).

    Ciao! :)

  • Re: Grafica sotto Windows

    Grazie per le risposte.

    Per ora il mio è un interesse puramente personale, perché da ingegnere elettronico non avevo mai approfondito l'aspetto della programmazione grafica, quindi cercavo di capire se fosse solo “tempo perso” oppure no. Al momento continuerò quindi su questa strada, poi nel caso dovessi intraprendere un lavoro legato a software commissionato mi concentrò su librerie più ad alto livello/già pronte e magari anche multipiattaforma. 

    Della serie non si smette mai di imparare :)

    P.S. ho scoperto l'esistenza di questo forum proprio quest'estate mentre in rete facevo ricerche sulle SFML.

  • Re: Grafica sotto Windows

    Riporto alla vostra attenzione l'argomento per porvi un paio di domande :)

    Intanto posso dire che lo studio delle API procede, anche se un po' a rilento perché al tempo stesso mi sto scrivendo una guida per non dimenticare tutto quello che imparo/testo ( la memoria dopo una certa età non è più così brillante come ai bei tempi della gioventù ).

    Ma veniamo al dunque ed ecco le domande:
    1. le varie librerie usate per fare grafica sotto windows alla fine utilizzano a più basso livello le stesse cose che si usano con le API Win32 o si appoggiano su altro?
    2. le librerie multipiattaforma (tipo Qt o wxWidgets) implementano a basso livello due blocchi di istruzioni grafiche (se così si può dire), una per windows e una per linux, o solo una e poi ci pensa il SO a gestire/tradurre il tutto?

  • Re: Grafica sotto Windows

    09/02/2023 - euscar ha scritto:


    1. le varie librerie usate per fare grafica sotto windows alla fine utilizzano a più basso livello le stesse cose che si usano con le API Win32 o si appoggiano su altro?

    Ciascuna libreria è diversa dall'altra, e il tutto dipende dalla libreria di cui stiamo parlando.

    Le librerie grafiche generalmente implementano primitive differenti da quelle offerte dalle API Win32, altrimenti tanto varrebbe utilizzare quest'ultime (che valore aggiunto darebbe altrimenti la libreria?), ma di nuovo “librerie grafiche” è un termine troppo generico che non dice nulla di specifico.

    09/02/2023 - euscar ha scritto:


    2. le librerie multipiattaforma (tipo Qt o wxWidgets) implementano a basso livello due blocchi di istruzioni grafiche (se così si può dire), una per windows e una per linux, o solo una e poi ci pensa il SO a gestire/tradurre il tutto?

    Il SO non gestisce nulla: le librerie genericamente offrono un layer comune e uniforme che prescinde dal sistema operativo, poi quando si arriva al punto in cui si devono chiamare le “primitive” per disegnare qualcosa, il layer utilizza una API oppure un'altra a seconda dei casi.

  • Re: Grafica sotto Windows

    09/02/2023 - Alka ha scritto:


    Il SO non gestisce nulla: le librerie genericamente offrono un layer comune e uniforme che prescinde dal sistema operativo, poi quando si arriva al punto in cui si devono chiamare le “primitive” per disegnare qualcosa, il layer utilizza una API oppure un'altra a seconda dei casi.

    E' questo il punto che vorrei capire meglio. Nel momento in cui si passa alla grafica vera e propria cosa viene chiamato?

    Mi è capitato di utilizzare ad esempio Allegro (con il C) o SFML (con il C++) e come ovvio utilizzano funzioni diverse/più semplici da implementare/gestire rispetto alle primitive su cui si basano, da qui il loro vantaggio. E immagino che lo stesso si possa dire per le Qt o le GTK ecc.
    Ma quando si passa al sodo, cosa viene usato? Le API di Windows? O forse le API DirectX?
    So che ad esempio SFML si basa su OpenGL, ma le Qt ad esempio?

    O sto facendo confusione?

  • Re: Grafica sotto Windows

    Ci sono n-mila strati

    1. hardware (scheda video) 
    2. driver scheda video che si possono suddividere in
    3. 1) supporto per Windows (normali finestre) 
    4. 2) supporto 3d, multimedia per i giochi (directx) 
    5. componenti per l'interfaccia utente fornite dal SO
    6. librerie aggiuntive che forniscono componenti piu' avanzati (Qt) 
    7. applicazione

    spannometricamente parlando

    Poi ci sono varianti a questa suddivisione

    CUDA: che ti permette di accedere direttamente all'hardware 

    OpenGL: libreria ‘standard’ per il 3D

    OpenCL, Vulcan,… tutte librerie specializzate

    Il consiglio e' usare qualche libreria cross piattaforma come Qt, vxwidgets, ecc. o magari qualche versione semplificata per realizzare GUI. 

    Tutto dipende da che ci devi fare

  • Re: Grafica sotto Windows

    Per ora l'interesse è puramente accademico, se così si può dire, e finalizzato a semplici finestre. Inoltre l'uso delle API Win32 è quasi forzato dal tool che sto usando e che adoro utilizzare, il DEV-C++ (5.11 Orwell). So che esiste la possibilità di utilizzare le wxWidgets con Dev, ma se non erro in abbinamento con le versioni precedenti di DEV, piene di bug, quindi non le ho mai provate.
     Inoltre voglio prima capire come si usano le librerie di windows. Tanto ho tempo e mi piace la programmazione più “a basso livello”. Ho già deciso che poi passerò ad imparare anche le OpenGL, sempre se avrò tempo.
    E sicuramente il passo successivo sarà dedicare altro tempo alle SDL e forse alle varie Qt e/o GTK perché vorrei imparare anche a programmare sotto Linux.

    Comunque mi sembra di aver capito, anche leggendo un po' in giro, che la programmazione delle finestre sotto windows, quale che siano il tool o le librerie utilizzate, passa poi sempre attraverso le API Win32, naturalmente senza il bisogno diretto del programmatore.

  • Re: Grafica sotto Windows

    10/02/2023 - euscar ha scritto:


    Comunque mi sembra di aver capito, anche leggendo un po' in giro, che la programmazione delle finestre sotto windows, quale che siano il tool o le librerie utilizzate, passa poi sempre attraverso le API Win32, naturalmente senza il bisogno diretto del programmatore.

    Tecnicamente, la creazione di una finestra in Windows la ottieni chiamando la funzione CreateWindow, ma una “finestra” in Windows è banalmente un handle che identifica un'area rettangolare, visibile o non visibile, che può ricevere messaggi (click, focus, ecc.) ma ciò che poi viene visualizzato all'interno dipende dalle successive funzioni API che vengono richiamate e che agiscono sul “device di contesto” associato alla finestra stessa.

    10/02/2023 - euscar ha scritto:


    Inoltre l'uso delle API Win32 è quasi forzato dal tool che sto usando e che adoro utilizzare, il DEV-C++ (5.11 Orwell).

    Se dai un'occhiata a C++Builder (visto che ti piace C++), ne potresti impazzire. :)

  • Re: Grafica sotto Windows

    10/02/2023 - Alka ha scritto:


    Tecnicamente, la creazione di una finestra in Windows la ottieni chiamando la funzione CreateWindow, ma una “finestra” in Windows è banalmente un handle che identifica un'area rettangolare, visibile o non visibile, che può ricevere messaggi (click, focus, ecc.) ma ciò che poi viene visualizzato all'interno dipende dalle successive funzioni API che vengono richiamate e che agiscono sul “device di contesto” associato alla finestra stessa.

    Grazie per questa precisazione, che mi chiarisce meglio il tutto ;)

    Se dai un'occhiata a C++Builder (visto che ti piace C++), ne potresti impazzire. :)

    A dire il vero in questo periodo mi sto concentrando di più sul C, anche se conosco entrambi. 
    Sarà che all'università avevo imparato prima il Pascal e poi il C++ senza passare dal C (erano strutturati così i miei due esami di informatica) e quindi negli ultimi tempi ho cercato di approfondire anche il C, sarà che mi piace meno la programmazione ad oggetti, in ogni caso il C mi sta prendendo sempre più. Inoltre se in futuro volessi approfondire anche le SDL, so che si basano sul C (a differenza delle SFML basate sul C++ che stavo imparando ad usare la scorsa estate).

    P.S. di tutto quello che approfondisco ho l'esigenza di farmi delle dispense. Magari una volta terminate potrei metterle a disposizione di chi fosse interessato, a titolo gratuito: faccio tutto sotto Creative Commons Pubblic License. Esiste qualche sezione qui sul forum adatta allo scopo?

  • Re: Grafica sotto Windows

    @euscar, per favore, lascia perdere.

    Di pubblicare le tue dispense, intendo.

    SE lo vuoi fare DEVI passare per un processo di ‘peer review’, se vuoi, di ‘controllo qualita’, da parte di persone che ne sappiano di programnazione mooooooolto piu' di te e che le rendano 'quanto meno' presentabili.

    Senza nulla togliere alla tua buona volonta', ma di ‘scemenze’ in Internet c'e' ne sono piu' che a sufficienza (diciamo pure il 99.999%).

    E comunque di librerie e documentazione per creare interfacce utente in modo ‘semplificato’ c'e' ne sono un bel po'. Oltre alla documentazione sulle librerie che hai usato/stai usando.

  • Re: Grafica sotto Windows

    @migliorabile

    Hai pienamente ragione, esiste molto materiale, a partire dalle reference di casa MS https://learn.microsoft.com/en-us/windows/win32/

    L'unico inconveniente, se così si può dire, è che tutto è nella lingua d'albione.
    Immagino già la tua risposta: se uno vuole imparare a programmare deve conoscere l'inglese, non ci sono santi. E ti do ragione anche su questo. Per mia fortuna riesco a leggerlo, almeno per quanto riguarda  libri/materiale di natura tecnica (però non mi so esprimere in inglese, a causa del fatto che ai miei tempi veniva spiegato male alle superiori, non come ora). Nonostante ciò mi trovo molto meglio a leggere guide in italiano, e di queste ne esistono pochissime e molto spesso anche mal tradotte.
    La guida che sto scrivendo, ad uso personale, in parte è una traduzione, rielaborata, del libro di Charles Petzold, Programming Windows, in parte una rielaborazione del seguente tutorial http://www.winprog.org/tutorial/ di cui esiste anche una traduzione in italiano, ma non è il massimo.

    In ogni caso, non mi costa nulla condividere il mio lavoro, quindi se vuoi o hai tempo da perdere o te la senti di valutare ciò che scrivo posso sempre girarti una bozza di quanto scritto finora, ma non saprei come visto la mancanza nel forum dei messaggi privati ;)

Devi accedere o registrarti per scrivere nel forum
12 risposte