|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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 |
|
|
|
|
|
#2 |
|
Senior Member
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.
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#4 |
|
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| |
|
|
|
|
|
#5 |
|
Senior Member
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! |
|
|
|
|
|
#6 |
|
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?
|
|
|
|
|
|
#7 |
|
Senior Member
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! |
|
|
|
|
|
#8 |
|
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
}
|
|
|
|
|
|
#9 |
|
Senior Member
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 */
}
Codice:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG3), NULL, (DLGPROC)AboutDlgProc); 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. |
|
|
|
|
|
#10 |
|
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 |
|
|
|
|
|
#11 |
|
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... |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
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! |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#15 |
|
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;
}
}
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!!! |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
a->c_str()
|
|
|
|
|
|
#17 |
|
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??? |
|
|
|
|
|
#18 |
|
Senior Member
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. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jul 2008
Messaggi: 1426
|
e allora come faccio a far vedere quanti file ho già copiato???
|
|
|
|
|
|
#20 |
|
Senior Member
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;
}
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:35.




















