Problema con la stampa in una lista usando le windows API

di il
1 risposte

Problema con la stampa in una lista usando le windows API

Buongiorno a tutti,

io avrei un problema usando le windows API. Devo stampare in una ListBox il contenuto di due file (un nome e un codice), nella funzione qui di seguito io concateno i record dei due file in una stessa stringa che poi passo alla funzione SendDlgItemMessage() per stamparla nella lista. Non capisco però per quale motivo non riesco a mettere uno spazio tra il codice e il nome e perchè l'ultima stringa che viene stampata viene stampata due volte come si può vedere in figura.

Quello che vorrei riuscire a fare è stampare le stringhe concatenate mettendo uno spazio tra codice e nome e impedire che si stampino dei dopioni così a caso.

Spero possiate aiutarmi grazie anticipatamente

Lorenzo



void ReadFile(HWND hwnd)
{
char buff[sizeof(buffer) + sizeof(wBuffer)];
char id[sizeof(buffer)], operatore[sizeof(wBuffer)];
file = fopen("id.txt","r");
utenti = fopen("utenti.txt","r");
if(file != NULL && utenti != NULL)
{
while(!feof(file)){
int z=0;
fread(id, sizeof(buffer), 1, file);
fread(operatore, sizeof(wBuffer), 1, utenti);
for(z;z<sizeof(id);z++){
buff[z] = id[z];
}
for(int k=0;k<sizeof(operatore);k++,z++){
buff[z] = operatore[k];
}
SendDlgItemMessage(hwnd, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buff);

}

}
fclose(file);
fclose(utenti);

}

1 Risposte

  • Re: Problema con la stampa in una lista usando le windows API

    Il problema sorge poichè tra i due cicli for devi incrementare la variabile z di 1.
    buff: |_|_|_|_|_|_|_|_|_|_|_|_|
    dopo il primo ciclo for facciamo un esempio z = 5, perchè c'è il nome marco
    |m|a|r|c|o|_|_|_|_|_|_|_|_|_|
    incrementi z di 1 nuovamente => z = 6 e avrai poi nel secondo ciclo for:
    |m|a|r|c|o|_|r|o|s|s|i|_|_|_|

    prova questo codice non l'ho testato:
    
    void ReadFile(HWND hwnd)
    {
    char buff[sizeof(buffer) + sizeof(wBuffer)];
    char id[sizeof(buffer)], operatore[sizeof(wBuffer)];
    
        file = fopen("id.txt","r");
        utenti = fopen("utenti.txt","r");
    
        if(file != NULL && utenti != NULL)
        {
    	    while(!feof(file))
    	    {
    		    int z=0;
    		    fread(id, sizeof(buffer), 1, file);
    		    fread(operatore, sizeof(wBuffer), 1, utenti);
    		
    		    for(z;z<sizeof(id);z++)
    		    {
    			    buff[z] = id[z];
    		    }
    
    		    for(int k=0;k<sizeof(operatore);k++,++z)
    		    {
    		    	    buff[z] = operatore[k];
    		    }
    	
    		    SendDlgItemMessage(hwnd, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)buff);
    
    	    }
    
        }
    
        fclose(file);
        fclose(utenti);
    
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte