begin process at 2008 08 20 17:27:38
1 228 990 membres
350 nouveaux aujourd'hui
14 259 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : gestion clavier sous mfc [ Archives / Au secours ] (dambeaufort)

gestion clavier sous mfc le 02/03/2004 09:57:52

dambeaufort

bonjour a tous,
j'ai regarder les messages deja preent dans le forum mais je n'arrive pas a efectuer la chose suivante:

J'aimerais sous une application mfc avoir une boucle du type:

while (i>0) {if (touche 'Y' enfoncee) {i=i-1}}

explication: une fois entrer dans la boucle, je veux gerer un deplacement que lorsque une touche est enfoncee. Si la touche est relachee, le deplacement se met en pause jusqu'a un nouvelle appui sur la touche en qst.

c donc tout simple mais je n'arrive pas a gerer le clavier dans mon application mfc
Pourriez vous m'aider.

Merci encore

Re : gestion clavier sous mfc le 02/03/2004 14:16:18

PunkDude424
Il faut que tu catch les message envoyer par le clavier dans defwindowproc ou pretranslatemessage

BOOL CWindowsDisplay::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
break;
}
return CDialog::PreTranslateMessage(pMsg);
}



Re : gestion clavier sous mfc le 02/03/2004 14:33:01

dambeaufort

ok je te remercie, ta solutions est excellente. Seul petit probleme ou plutot interrogation, est il possible de faire la meme chose suivant tel ou tel touche de clavier enfonce.

ex actuellement le message"message" s'affiche lorsque je j'appui sur une touche quelquonque. est il possible de limiter son affichage que lorsque la touche entree est pressé?

BOOL CAppliDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN: m_consigne.ReplaceSel("message");
break;
}
return CDialog::PreTranslateMessage(pMsg);
}

Merci encore

Re : gestion clavier sous mfc le 02/03/2004 15:31:00

PunkDude424
BOOL CAppliDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
if((pMsg->wParam) == VK_Y)
{
}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}


Re : gestion clavier sous mfc le 02/03/2004 15:32:30

PunkDude424
tu peux retrouver toutes les virtual key sur msdn

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/w98ddk/hh/w98ddk/keycnt_4fqw.asp

Re : gestion clavier sous mfc le 02/03/2004 15:37:58

dambeaufort

ok je vais tester.
Reste un hic, si tu pouvais m'aider.....

ta fonction me pêrmet de voir lorsque une touche du clavier est enfonce, c ok. mais comment l'inserer dans ma structure qu e j'ai definis ci dessus.
Une fois dans le while, je ne voit pas comment tester en continu si un bouton du clavier est enfonce......

Re : gestion clavier sous mfc le 02/03/2004 16:13:47

PunkDude424
tu te mets un variable dans ta classe.....par exemple m_KeyPressed....et quand tu rentre dans pretranslatemessage et dans WM_KEYDOWN tu mets la varaible a true par exemple et quand tu va dans WM_KEYUP tu mets la variable a false.....alors dans ta fonction tu mets ta boucle en mettant

while(m_KeyPressed)
....

Re : gestion clavier sous mfc le 02/03/2004 16:46:04

dambeaufort

et bien tu vas dire que je suis nul, mais je n'y arrive pas.
Voila ce que g pour l'instant:

//fct gerant l'acqui du clavier
BOOL CAppliDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
if((pMsg->wParam) == VK_DELETE) {m_clavierok=TRUE;}
else {m_clavierok=FALSE;}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}


//fct de lancement de procedure
void CAppliDlg::Onlancer()
{
char cconsignebarre;
long consignebarre;
int Pas=1; int gap;

if (m_mob ) {consignebarre=m_consignebarre.GetPos();
gap=consignebarre;
while (m_clavierok==TRUE)
{while (gap>0.01)
{Sleep(500);
m_progress.SetPos(consignebarre-gap);
ltoa(consignebarre-gap,&cconsignebarre,10);
m_consigne.ReplaceSel(&cconsignebarre);
gap=gap-Pas;m_clavierok=FALSE;}
}
}
else {m_consigne.ReplaceSel("no ");}
}



Le probleme c que ca marche mais je voudrais une confirmation que le bouton del est enfoncee a chaque pas.
Pour l'instant les pas ce deroule que si j'ai enfonce le bouton del initialement. si je le relache j'aimerais que l'evolution des pas s'arrete.

Merci.

Re : gestion clavier sous mfc le 02/03/2004 17:01:09

PunkDude424
et bien tu vas dire que je suis nul, mais je n'y arrive pas.
Voila ce que g pour l'instant:

//fct gerant l'acqui du clavier
BOOL CAppliDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
case WM_KEYDOWN:
if((pMsg->wParam) == VK_DELETE)
{
m_clavierok=TRUE;
}
break;
case WM_KEYUP:
if((pMsg->wParam) == VK_DELETE)
{
m_clavierok= FALSE;
}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}




Re : gestion clavier sous mfc le 02/03/2004 17:08:48

dambeaufort

oui mais ce que je veux dire c que une fois que tu as lancer le "mouvement" donc que tu es entrer dans la boucle du while(gap>0.01), le changement d'etat du bouton DEL ne fera rien a l'execution du mouvement.
Ce que je voudrais c que le mouvement s'arrete des que le bouton est relache.


[Page 1 Page 2]
Classé sous : arrive, gestion, clavier, mfc, touche

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
campagne Adwords
Budget : 5 000€
Boite echanges securis...
Budget : 500€

Snippets en rapport

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS