Newsgroup: it.comp.lang.c++
Titolo: intercettare un QUALSIASI tasto

Salve a tutti :-)
Qualcuno mi può dire per piacere come si intercetta un QUALSIASI tasto? Per
intercettare l'ESC ho già chiesto a Franco (che ringrazio per la sua
infinita disponibilità), ma per un tasto qualsiasi? Inoltre, in quale .h
sono contenuti gli ID dei tasti, se ci sono (es.: ID_ESC, ID_RETURN, ecc.)?
Grazie - ciao :-)
ps OT: utilizzo MSIE5 beta2, qualcuno sa se è possibile cambiare il testo
del reply header? Anziché vedere "Original message" mi piacerebbe vedere
roba tipo "Il giorno ... il nostro amico ... ci ha deliziato con questo
messaggio" (ogni tanto si vede in qualche mail)? Grazie!
Marco Zanon (
m.z...@usa.net
)
http://www.geocities.com/SiliconValley/Peaks/6455
(BUY CDS AT THE LOWEST PRICES through my site!!!
Zamorano fan page, free MIDI mailing list, Music db...)

sono contenuti gli ID dei tasti, se ci sono (es.: ID_ESC, ID_RETURN, ecc.)?
In quale ambiente di programmazione?  Non esiste una singola
risposta che si applichi a tutti; DOS, Linux, Win32, ecc, ciascuno
richiederanno diversi approcci, a seconda anche delle API e/o
framework che scegli di usare (in Linux, curses o non curses? in
Win32, API o Console?  ecc ecc).  In messaggi contenenti questo
tipo di richieste, e` assurdo che non si chiarisca l'ambiente di
proprio interesse!
Alex

 wrote in message
77t41v$len$3...@lx03.uu.ml.org...


Intendevo in Visual C++ 4 per Windows95.
VC++ su Win95 permette di scrivere molti tipi di programmi,
e il modo di "intercettare QUALSIASI tasto" varia fra di essi:
1. applicazioni di Console,
2. serventi COM che usano il framework ATL
    2a. controlli ActiveX di vari tipi
    2b. altre situazioni (MTS, ...)
3. applicazioni o DLL che usano il framework MFC
4. applicazioni (o altro) basate sulle nude API Win32
Uno schema generale applicabile in maniera leggermente
diversa a vari casi di 2/3/4 e` basato sul fatto che, a meno
che non sia attivo un vero dialogo modale (che gestisce gli
eventi per conto suo, e per il quale dunque puo` occorrere
un altro approccio), tutti gli eventi passano attraverso un
certo "collo di bottiglia".
Per 3, ad esempio, questo "collo di bottiglia" consiste nel
"loop degli eventi", implementato dai metodi Run, PumpMessage,
ecc, delle classi CWinThread/CWinApp/ecc delle MFC.  Il
modo normale di intercettare "qualsiasi evento" consiste nel
fare un'override di PreTranslateMessage nella propria classe
derivata da CWinApp, la cui implementazione sara` del tipo
BOOL 
CMyApp::PreTranslateMessage( MSG* pMsg )
{
    // esamina pMsg; se da intercettare,
    // torna TRUE, se no passalo alla classe base
    if(devoIntercettare(pMsg))
        return TRUE;
    else
        return CWinApp::PreTranslateMessage(pMsg);
}
E` un idioma C++ abbastanza comune, considerando che
la PreTranslateMessage e` appunto una funzione virtuale.
La pressione di un tasto genera un messaggio
    WM_KEYDOWN
oppure
    WM_SYSKEYDOWN
se viene usato assieme al tasto di ALT; il rilascio del
tasto genera WM_KEYUP o WM_SYSKEYUP; nel caso
non-ALT, viene normalmente chiamata TranslateMessage
che, se del caso, genera un WM_CHAR (WM_SYSCHAR,
WM_SYSCOMMAND, WM_SYSDEADCHAR, e, infine,
WM_DEADCHAR, sono varie altre possibilita` generate,
sempre da TranslateMessage, in vari altri casi).
Si possono avere molteplici key-down prima del key-up
a causa della "auto-repeat" della tastiera.
A seconda di quel che fa comodo, si puo` dunque scegliere
di intercettare WM_KEYDOWN, WM_CHAR, o che altro.
Per capire cosa e` stato premuto, rilasciato, o "tradotto",
a che finestra esattamente era diretto, ecc, bisogna,
naturalmente, esaminare la struttura MSG cui l'argomento
pMSG, manco a dirlo, "punta".  Le possibilita` sono
naturalmente moltissime, per cui, benche` la documentazione
sia chiara e completa, puo` darsi che ti servano ulteriori
chiarimenti (da chiedersi qui sul gruppo, please, NON
nella mia mailbox!).  L'ideale, naturalmente, sarebbe che
passasse il gruppo it.comp.programmare.win32, la cui
ultima call-for-votes e` stata teste` postata su questo
gruppo, cosi` che queste discussioni dettagliate si possano
svolgere senza scocciare coloro che, pur interessati al
linguaggio C++, non hanno invece il minimo interesse in
Win32 e i suoi vari sotto-ambienti.
Alex

=-->VC++ su Win95 permette di scrivere molti tipi di programmi,
=-->e il modo di "intercettare QUALSIASI tasto" varia fra di essi:
=-->1. applicazioni di Console,
=-->2. serventi COM che usano il framework ATL
=-->    2a. controlli ActiveX di vari tipi
=-->    2b. altre situazioni (MTS, ...)
=-->3. applicazioni o DLL che usano il framework MFC
=-->4. applicazioni (o altro) basate sulle nude API Win32
Ottimo... Alex, che cos'e' un framework?
Avrei voluto chiederlo in privato, ma forse non sono l'unico a non
sapere... in particolare, qual e' quello ATL?
Scusate l'ignoranza... :-)
Ciao ciao, Rony.

Scusate l'ignoranza... :-)
Nulla da scusare!  Come si impara, se non chiedendo?!
Alex