Newsgroup: it.comp.programmare.win32
Titolo: Posso reindirizzare lo stdout su un editbox?

Salve a tutti,
ho una procedura C che normalmente mostra sullo stdout i risultati delle
operazioni (printf). C'č un modo rapido per reindirizzare l'output su un
controllo di tipo "edit"? o devo trasformare ogni singola printf in una
funzione che vada ad aggiungere testo al mio editbox?
Grazie
--
Bye
Johnny
http://digilander.libero.it/Superpork/

 funzione che vada ad aggiungere testo al mio editbox?
Potresti provare con SetStdHandle(), che ti permette di dirottare stdout
dove vuoi (ad esempio in una pipe creata con CreatePipe()). Non so se
funzioni anche per i processi Win32 GUI, ma tentar non nuoce.
--
Lorenzo

 funzioni anche per i processi Win32 GUI, ma tentar non nuoce.
:-/
ho provato ma non succede nulla. La cosa strana è che il SetStdHandle ha
successo (gli ho passato l'handle della finestra dell'edit control come
input) ma poi non succede nulla se faccio una printf....
ho provato a "spiare" la finestra con spy++ ma non arriva nessun tipo di
messaggio quando faccio la printf....
qualche altro suggerimento? mi sa che mi rassegnerò a passare ogni singola
stringa all'edit box.... uffi!
Bye
Johnny

 input)
Cosi` non funziona di certo! Devi passargli l'handle di un file,
comunemente quello di una pipe creata con CreatePipe(). Poi ti devi
leggere i dati a mano con ReadFile(), e soltanto dopo potrai trasferirli
alla finestra con SetWindowText().
--
Lorenzo

 alla finestra con SetWindowText().
Ammesso e non concesso che questo sistema funzioni, dovrei comunque sapere
in che momento leggere con la readfile un buffer di caratteri e spedirlo
alla finestra tramite la setwindowtext... come faccio?
dovrei dopo ogni printf che uso richiamare la readfile e la setwindowtext?
mi sa che allora faccio meglio a sostituire le mie printf con la
setwindowtext direttamente...
non trovi?
Grazie comunque per i consigli.
--
------
Per rispondermi scrivete all'indirizzo
jonquerido sul provider tin punto it

 caratteri
Certo che no! Puoi creare un thread a parte che non fa altro che
chiamare la ReadFile(), oppure usare l'I/O asincrono (che poi e` la
stessa cosa fatta dal sistema operativo anziche` da te).
Tutto cio` sembra contorto e complesso, in realta` si tratta di una
ventina di righe di codice al massimo.
--
Lorenzo

 ventina di righe di codice al massimo.
Tu avresti fatto così?
INIZIO CODICE-----------------------------------------
DWORD WINAPI redirectThreadProc(LPVOID lpParameter)
{
 HWND hEditBox;
 HANDLE hRead;
 HANDLE  hWrite;
 int  res;
 BOOL    blnRes;
 char lpBuffer[MAX_PATH];
 DWORD bytesRead;
 hEditBox=(HWND)lpParameter;
 res=CreatePipe(&hRead, &hWrite, NULL, 0);
 if (res == 0)
 {
  getErrorDialogBoxParam(NULL, "Errore nella creazione del Pipe", 0);
  ExitThread(-2);
 }
 blnRes= SetStdHandle(STD_OUTPUT_HANDLE, hWrite);
 if (blnRes == FALSE)
 {
  getErrorDialogBoxParam(NULL, "Errore nel recupero dello stdout", 0);
  ExitThread(-3);
 }
 while (1)
 {
  lpBuffer[0]='\0';
  blnRes = ReadFile(hRead, lpBuffer, MAX_PATH, &bytesRead, NULL);
  if (blnRes == FALSE)
  {
   getErrorDialogBoxParam(NULL, "Lettura fallita", 0);
   ExitThread(-4);
  }
  blnRes = SetWindowText(hEditBox, lpBuffer);
  if (blnRes == FALSE)
  {
   getErrorDialogBoxParam(NULL, "Settaggio testo nell'EditBox fallito", 0);
   ExitThread(-5);
  }
 }
}
FINE CODICE-----------------------------------------
Nel thread principale faccio un loop lunghissimo di printf("TEST\n") ma il
thread sembra rimanere bloccato sulla ReadFile come se non arrivasse
niente da leggere.
La creazione del Pipe e il settaggio dello stdout hanno successo ma sembra
proprio non leggere niente.
Grazie per l'aiuto
