Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-08-2008, 18:36   #1
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
[c++] api aggiornare testo

Ciao,

sto lavorando in c++ con le api. Premetto che sto lavorando con i file .rc per la grafica (in quanto non conosco gli altri comandi che si inseriscono direttamente nel codice sorgente).
Volevo sapere se potete dirmi come aggiornare del testo in una dialogbox.
Infatti ho creato una libreria che copia una directory e vorrei che visualizzasse una dialogbox con scritto qualcosa del tipo

Avanzamento:

numero file copiati/numero file totali

grazie ciao
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2008, 20:19   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ottieni l'HWND a partire dall'id della risorsa con GetDlgItem e poi usi l'api SetWindowText.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2008, 22:29   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci Guarda i messaggi
Ottieni l'HWND a partire dall'id della risorsa con GetDlgItem e poi usi l'api SetWindowText.
esiste SetDlgItemText
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2008, 23:29   #4
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
riguardo la seconda opzione proposta è giusto usarla in questo modo?
SetDlgItemText(hWnd, IDC_LTEXT_PROGRESS, "pippo");
perchè il compilatore dice

E:\Documents and Settings\Matteo\Documenti\C++\nonno\Copia immagini\copymydir.h|109|error: `hWnd' was not declared in this scope|
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 01:10   #5
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Hai semplicemente usato un nome sbagliato di variabile che non è definita nella funzione che usi.
Assicurati che la variabile hWnd sia esattamente quella che indica la finestra in questione (e, ovviamente, che sia dichiarata e correttamente inizializzata ).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 08:50   #6
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
Hai ragione ma come faccio se voglio utilizzare questa funzine al di fuori "del ciclo" (non mi viene la parola) del mio dialogo? cioè esiste un funzione che "imposta" l'handle?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 10:47   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Se usi quella chiamata dall'interno della funzione di callback che gestisce la finestra di dialogo, allora puoi recuperare quel valore dai parametri della funzione (è il primo parametro passato alla funzione, se non ricordo male).

Altrimenti se devi ricordarlo dopo la creazione della finestra devi salvare quel valore da qualche parte, magari passandolo tra i parametri delle funzioni che ne hanno bisogno se proprio è necessario.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 11:19   #8
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
il problema è che io devo richiamare una funzione senza mai passare dalla DialogProcedure, ti spiego guarda questo codice:
Codice:
void copymydir(char *percorso, char *percorso2, BOOL &result, BOOL &delall)
{
  DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG3), NULL, AboutDlgProc);


//qui c'è altro codice....


  copyallfile(result);//questa è la funzione alla quale devo passare l'handle

}
il punto è (come posso dire,) che siccome la funzione non viene richiamata dalla Dialog Procedure, non so come poter passare l'handle a copyallfile.
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 13:00   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Allora, innanzitutto dovresti controllare che la finestra di dialogo sia stata creata correttamente:
Codice:
if (DialogBox(/* ...parametri... */) == IDOK)
{
    /* copia tutti i file */
}
else
{
    /* stampa un messaggio di errore */
}
Comunque, hai una procedura di callback impostata:
Codice:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG3), NULL, (DLGPROC)AboutDlgProc);
Quindi il primo parametro di AboutDlgProc() è l'handle della finestra di dialogo appena creata: se il tuo interesse è solo impostare del testo, lo puoi fare mentre la finestra viene creata gestendo quel messaggio con la tua funzione di callback e lasciando il resto dei messaggi al gestore di default:
Codice:
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_INITDIALOG:
            /* fai quello che devi fare */
            break;
    }
    return FALSE;
}
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 21-08-2008 alle 13:06.
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 14:45   #10
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
in realtà io vorrei creare una finestra che aggiorni continuamente il testo, e siccome la funzione che riguarda la copia dei file è al di fuori della Dialog Procedure, avrei bisogno se possibile di richiamare SetDlgItemText da un'altra funzione ma non riesco... comunque adesso cerco una soluzione alternativa "spostando le funzioni", voi intanto ripondete...
ciao e grazie
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 14:52   #11
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
esite una funzione che ricavi l'handle di una dialog box pertendo dal suo ID???
così dovremmo essere a cavallo...
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:03   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
in realtà io vorrei creare una finestra che aggiorni continuamente il testo, e siccome la funzione che riguarda la copia dei file è al di fuori della Dialog Procedure, avrei bisogno se possibile di richiamare SetDlgItemText da un'altra funzione ma non riesco... comunque adesso cerco una soluzione alternativa "spostando le funzioni", voi intanto ripondete...
ciao e grazie
Ricava l'handle alla dialog item tramite GetDlgItem e poi passa l'HWND alla tua funzione. In quel modo puoi usare SetWindowText per settare il testo.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:10   #13
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Be' allora non puoi farlo in quel modo: DialogBox() crea la finestra di dialogo, la visualizza, reagisce agli input e ti dà il codice relativo all'input dato (nel mio esempio, IDOK perché suppongo che l'utente abbia premuto "Ok" per confermare, ma poteva dirmi "Sì" e io ottenere IDYES). Quindi non ho capito di preciso come dovrebbe visualizzarti i file in trasferimento.

Direi che puoi fare in due modi: evitare DialogBox() e chiamare CreateDialog() per ottenere anche l'handle e usarlo come ti pare. L'alternativa è creare una semplice finestra figlia modale e avere ancora più libertà d'azione.

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:13   #14
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da cionci Guarda i messaggi
Ricava l'handle alla dialog item tramite GetDlgItem e poi passa l'HWND alla tua funzione. In quel modo puoi usare SetWindowText per settare il testo.
Ma GetDlgItem() non recupera solo l'handle dei controlli interni alla finestra? Che però sì, in effetti può farlo se ha bisogno di cambiare solo un'etichetta...
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:28   #15
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
ciao
ho trovato la soluzione, daniele hai ragione su entrambe le cose che sono comunque riuscito a risolvere creando una sorta di toolbar (che comunque sembra una finestra).
Oral'ultimo problema off-topic:
guardate questa funzione:
Codice:
oid copyallfile(BOOL &result)
{
    vector<string>::iterator a = listaofile.begin();
    vector<string>::iterator b = listadfile.begin();
    while(a != listaofile.end())
    {

        copymyfile((*a).c_str(), (*b).c_str(), result);

        a++; b++;

        cout<<*a<<endl; //visualizza il file di origine

        SetDlgItemText(g_hToolbar, IDC_TEXTPROGRESS, a); //funzione per cambiare il testo che non funziona, l'errore è causato dalla variabile a;


    }

}
allora io ho queste 2 variabili (a , b) che mi permettono di usare i due vettori che contengono strignhe che indicano l'origine e la destinazione dei file da copiare.
Siccome penso che a e b indichino la posizione nei vettori (ne sono sicuro se no non si implementerebbero per passare alla stringa successiva!!!) vorrei sapere come posso visualizzare il loro valore (numerico) nella finestra che ho creato perchè come ho scritto io non funziona.
Ciao e grazie dell'aiuto che mi state dando!!!
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:30   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
a->c_str()
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 15:41   #17
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
quello va bene ma per visualizzare la stringa del vettore, non per visualizzare a (inteso come numero).
Quindi???
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 16:08   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
????
Il terzo parametro deve essere un LPCTSTR...quindi non puoi passare un puntatore alla classe string.
In teoria ci sarebbero altri casini sulla conversione a wide char e così via, intanto inizia così.

Ultima modifica di cionci : 21-08-2008 alle 16:13.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 16:12   #19
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
e allora come faccio a far vedere quanti file ho già copiato???
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2008, 16:19   #20
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non è che ti eri spiegato molto bene
a e b sono iteratori e non contatori.

Codice:
void copyallfile(BOOL &result)
{
    vector<string>::iterator a = listaofile.begin();
    vector<string>::iterator b = listadfile.begin();
    int counter = 0;
    while(a != listaofile.end())
    {

        copymyfile((*a).c_str(), (*b).c_str(), result);

        a++; b++; counter++; 

        cout<<*a<<endl; //visualizza il file di origine

        ostringstream<TCHAR> counterText;
        counterText << counter;

        SetDlgItemText(g_hToolbar, IDC_TEXTPROGRESS, counterText.str()); //funzione per cambiare il testo che non funziona, l'errore è causato dalla variabile a;


    }

}
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
E-mail reset password di Instagram: la c...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:35.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v