Risultati da 1 a 15 di 15
  1. #1
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito [visual c++]Intercettare pressione tasto della tastiera

    Ciao,avrei una domanda: ho una semplice dialog che esegue un task all'infinito dentro un for(;,vorrei interromperlo e chiudere la dialog dopo la pressione di qualsiasi tasto della tastiera.

    Ah sono nuovo di visual c++,MFC e cose varie,se esiste una soluzione piu' semplice non mi dispiacerebbe saperla. Grazie.

  2. #2
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Esiste la WaitDialogMessage (o qualcosa di simile,sono tanti anni che non uso le MFC e VC++) che contiene una funzione PumpMessage() che permette di eseguire la coda dei messaggi; questo è necessario perchè mentre sei nel ciclo for(){} questo inibisce il processo degli eventi da parte della finestra (quindi non si ridisegna, non risponde al mouse e nemmeno alla tastiera).
    Quando usavo io il VC++ esisteva anche un wizard/template che costruiva la finestra con tutto il codice pronto.

  3. #3
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Quindi dovrei lavorare coi thread?azz non mi ci volevo immischiare..

  4. #4
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    no, non ne hai bisogno. semplicemente copi la pumpmessage() nella tua funzione e la chiami nel ciclo for(); intercetti il tasto per la terminazione che dovrebbe passare nella coda messaggi.no thread.

  5. #5
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Sì è vero ho usato anche la peekmessage e ora funzia come voglio io.

  6. #6
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Altro problema: devo aggiornare delle label statiche sempre in un loop,le vado ad aggiornare(sono di tipo CStatic) ma non si vedono durante il loop,sembra che ci sia un problema di refresh

  7. #7
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    guarda, il problema è sempre quello.
    devi solo capire quali sono i messaggi da mettere in coda; probabilmente un WM_PAINT.
    Ora come ora saranno 5/6 anni che non sviluppo in Win/MFC quindi sono un po' arrugginito, comunque ti direi anche di guardare il WM_KICKIDLE.
    Penso che in MSDN ci siano un sacco di esempi.
    Se non trovi soluzione io mi ritiro perchè non ho possibilità di scrollarmi di dosso la polvere sul VC; posso consigliarti - come lettura che ai tempi mi è molto servita - MFC internals: inside the Microsoft foundation class architecture.
    Ciao

  8. #8
    Banned
    Data Registrazione
    26-02-10
    Località
    Firenze
    Messaggi
    7,348

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Citazione Originariamente Scritto da nemesis69 Visualizza Messaggio
    Altro problema: devo aggiornare delle label statiche sempre in un loop,le vado ad aggiornare(sono di tipo CStatic) ma non si vedono durante il loop,sembra che ci sia un problema di refresh

    Ciao,

    per aiutarti, il tuo problema sembra piu' profondo, non ne esci chiedendo solo un aiuto su di una singola cosa, mi sa che devi studiarti bene come funziona il ciclo dei programmi basati su windows e come funziona la circolazione dei messaggi tra thread.
    Ti sconsiglio i libri mondadori della collana microsoft press.
    Qualcuno di Apogeo invece potrebbe fare al caso tuo.

  9. #9
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Altro problema: CreateProcess

    BOOL WINAPI CreateProcess(
    __in_opt LPCTSTR lpApplicationName,
    __inout_opt LPTSTR lpCommandLine,
    __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
    __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
    __in BOOL bInheritHandles,
    __in DWORD dwCreationFlags,
    __in_opt LPVOID lpEnvironment,
    __in_opt LPCTSTR lpCurrentDirectory,
    __in LPSTARTUPINFO lpStartupInfo,
    __out LPPROCESS_INFORMATION lpProcessInformation
    );

    Tenendo conto che l'applicazione è un semplice exe di un vecchio codice C e che i parametri sono di questo tipo: "D sourcefile destfile", ovviamente passando semplicemente il tutto come 2 stringhe mi dà errore in esecuzione.

    Sono convinto che sia un errore nel passaggio dei primi 2 parametri( lpApplicationName e lpCommandLine),facendo un esempio io li passo come "exec.exe" e " D FILE.DAT FILE.WRK".Sbaglio qualcosa?manca qualche carattere magico?

  10. #10
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    cosi ad occhio:
    • LPCTSTR lpApplicationName: passerei il percorso completo di EXEC.EXE (o dell'exe che vuoi far girare)
    • LPTSTR lpCommandLine: non puoi passare una stringa costante come "FILE.DAT FILE.WRK" perchè si tratta di una LPTSTR e non LPCTSTR; questo significa che devi fare qualcosa tipo
      Codice:
      TCHAR lpszCmdLine[500];
      strcpy(lpszCmdLine,"FILE.DAT FILE.WRK");
      e poi passare lpszCmdLine
    • LPSTARTUPINFO lpStartupInfo deve essere != NULL e ti rimando alla - sicuramente completa - guida in linea MSDN
    • LPPROCESS_INFORMATION lpProcessInformation deve essere l'indirizzo di una PROCESS_INFORMATION e non può essere == NULL
    cosi ad occhio,nhè!
    Ultima modifica di bellabax; 27-07-10 alle 23:36:18

  11. #11
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Ok ho risolto,il problema del passaggio di stringhe lo avevo risolto(in quel caso,ovviamente,dava errore in compilazione).

    Ah poi passo tutto(comando+parametri) attraverso lpcommandline,su MSDN ho letto che si puo' fare cosi'.

    Il problema era che sbagliavo qualcosa nell'inizializzazione delle due strutture,ho risolto cosi':

    STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    ZeroMemory (& pi, sizeof (pi));
    ZeroMemory (& si, sizeof (si));


    (e usando la CreateProcessA che e' la versione ANSI).

  12. #12
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Io ero rimasto che si doveva fare
    Codice:
    si.cb = sizeof(si)
    per avere le cose corrette.
    stai attento che poi funzioni anche in release

  13. #13
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Si' e' vero. Mi sono lasciato tradire da un esempio su internet. Controllando l'esempio su MSDN c'e' anche l'assegnamento della grandezza della struttura.

  14. #14
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    non gli sfugge niente ad emmeessedienne

  15. #15
    Shogun Assoluto L'avatar di nemesis69
    Data Registrazione
    10-07-03
    Località
    Cassano Magnago(VA)
    Messaggi
    52,999

    Predefinito Riferimento: [visual c++]Intercettare pressione tasto della tastiera

    Eh gia'. Anche se a volte e' poco newbie friendly..

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato