Newsgroup: it.comp.lang.c++
Titolo: Come intercettare la pressione di un tasto

Salve,
io ho provato nei 2 modi sottostanti...però non succede nulla(il mio
obbiettivo è disabilitare il tasto ESC)
1) void CClientDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==27)
{
AfxMessageBox("hai premuto ESC");
return;
}
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
2)void CClientDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==27)
{
AfxMessageBox("hai premuto ESC");
return;
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
Inoltre come posso disabilitare la combinazione ALT+F4?
Grazie a tutti.
Emanuele(
ebru...@tin.it
)

Per la disabilitazione dell'alt-f4 devi intercettarti il messaggio
WM_SYSCOMMAND:
void CClientDlg::OnSysCommand( UINT nID, LPARAM lParam )
{
 if ( (nID==SC_CLOSE)  ) return;
 CDialog::OnSysCommand(nID, lParam);
}
In questo modo non puoi uscire dall'applicazione ne' dal menu di sistema
della finestra (quello in alto a sinistra) ne' con la combinazione di
tasti alt-f4.
Per quanto riguarda l'altro problema, devi sapere che le routine OnChar,
OnKeyDown, etc. riguardanti la pressione dei tasti, vengono inviati
direttamente al controllo che in quel momento ha il focus; quindi se
nella finestra di dialogo (presumo dal nome che sia una classe derivata
da CDialog) hai ad esempio una casella di edit con il focus attivo i
suddetti messaggi vanno a quel controllo e non alla finestra di dialogo.
Spero di esserti stato utile.
Ciao, Antonio.
P.S.: Ricordatevi di votare per il nuovo newsgroup
it.comp.programmare.win32


 it.comp.programmare.win32
... cosi' ci si toglie dai piedi queste cose che sono essenzialmente
non portabili e non hanno nulla a che fare col linguaggio; ed alle
quali si risponde presupponendo che tutto il mondo sia schiavo di Bill
ed usi il suo software.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

ed usi il suo software.
??? Che assurdita` e` mai questo "presupponendo"?!  Se, come
spesso succede, chi pone una domanda non ha il buonsenso di
chiarire in che ambiente sta operando, si puo` nondimeno a volte
dedurlo dal contesto, ad esempio dal codice che posta, senza
"presupporre" proprio nulla, men che meno ipotetiche "schiavitu`".
Chi chiama AfxMessageBox, ad esempio, come colui che ha posto
inizialmente questa domanda, si puo` _ragionevolmente presumere_
che usi MFC, ambiente in cui questa funzione e' definita.
Alex

Inoltre come posso disabilitare la combinazione ALT+F4?
Supponendo, come pare, che tu stia usando MFC, se vuoi
intercettare (bloccare) qualsiasi pressione di tasto, o altro
evento diretto alla tua applicazione, un possibile punto di
intervento é la PreTranslateMessage, funzione virtuale della
classe CWinApp di cui puoi quindi fare l'override nella tua
classe derivata dalla CWinApp stessa; PreTranslateMessage
é invocata dal framework non appena ciascun messaggio é
ricevuto, per sapere se vada ulteriormente istradato come
normale.
Puoi tornare TRUE per tutti i messaggi che hai determinato
di volere bloccare; per tutti gli altri, mi raccomando, chiudi
con:
    return CWinApp::PreTranslateMessage(pMsg);
cioé, frequente idioma C++, delega alla funzione virtuale
della tua classe-base, di cui hai fatto l'override, la gestione
di tutti i casi che non desideri esplicitamente modificare.
Alex

 dedurlo dal contesto
... e nella quasi totalita' dei casi si capisce che opera sotto DOS o
qualche sapore di Windows.  Senza offesa, ma chi lavora in altri
ambienti generalmente lo scrive chiaramente nel suo post; solo chi ha
un PC ed un sistema Microsoft "presuppone" che tutto il resto del
mondo faccia come lui.  Prendila non come un'offesa personale, ma come
il risultato di una indagine statistica fatta in casa :-)


ambienti generalmente lo scrive chiaramente nel suo post; solo chi ha
Cosa presupponga chi pone una domanda e` un discorso.  Tu
scrivevi quel "presupponendo" rivolto a chi RISPONDE, che e`
un ALTRO discorso.
Personalmente, mi pare che i post relativi a sistemi operativi non-MS
siano circa un 10% (ragionevole, considerando che per i piu`
diffusi di essi, come Linux, esisterebbero gia` gruppi appositi),
e che la frazione di quel 10%, come del 90% relativi ad ambienti
MS, che non si peritano di chiarire l'esatto ambiente, sia analoga;
le tue percezioni possono essere distorte dalla scocciatura che
ti da` quel 90%, ma ricorda il teorema di Bayes:
    P(A|B) = P(B|A) * P(A) / P(AB)
dal quale non puoi prescindere indipendentemente da quanto "fatte
in casa" le tue statistiche possano essere.
Quanto alle _risposte_, che sono quelle che SPECIFICAMENTE
criticavi nel tuo ultimo post ("si risponde presupponendo" e` la
frase, falsa E offensiva), sono soggettivamente sicuro che sono
una minoranza delle risposte quelle cui una simile critica si puo`
applicare (post originale che non asserisce E non permette
ragionevolmente di inferire lo specifico ambiente che pero` e`
necessario sapere per rispondere, risposta che invece di fare
notare questo difetto nel post originale risponde "come se"
l'ambiente fosse stato chiarito, cioe`, appunto, "presupponendo").
Alex

it.comp.programmare.win32
E come si fa a votarlo?
San Vegeta from Hell
http://www.geocities.com/Area51/Dungeon/8436
http://come.to/Fantasy.it

E come si fa a votarlo?
Trova, sugli archivi di questo gruppo e/o su quelli
di it.news.votazioni (entrambi reperibili sul sito
www.dejanews.com
 usando la funzione "Power
Search") la "CVF" ("call for votes") relativa al
gruppo in questione, leggila, e segui le istruzioni
in essa contenute.
Fra una settimana o due la CVF dovrebbe venire
ripostata (anche in questo gruppo) quindi, se lo
segui regolarmente, riapparira`; stacci attento...
Alex