cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009
-
14 oct. 2007 à 12:24
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009
-
8 nov. 2007 à 10:06
Bonjour à tous,
Dans un sousi de rendre mon code le plus lisible possible j'aimerais savoir s'il n'y à pas une façons plus charmante, plus courte de coder la detection d'une touche : (Je vous épargne les déclarations etc...)
//J'ai créer 2 dialog box et mon but est de detecter quand j'appui sur entrée dans quelle dialogbox je me trouve hDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
hDlg2 = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG2), NULL, DialogProc2);
while (GetMessage(&msg, NULL, 0, 0))
{
if (hDlg || IsDialogMessage(hDlg, &msg))
{
//Detecte l'appui sur la touche entrée
if (msg.message == WM_KEYDOWN && msg.wParam==VK_RETURN){
msg.message =WM_COMMAND;
msg.wParam= IDC_BUTTON1; //La touche entrée simule l'appui sur bouton
if (msg.hwnd == GetDlgItem( hDlg , IDC_EDIT1)) //Si je suis dans la dialog box 1 msg.hwnd =hDlg; if (msg.hwnd= =GetDlgItem( hDlg2 , IDC_EDIT1)) //Si je suis dans la dialog box 2 msg.hwnd =hDlg2;
if (msg.hwnd= =GetDlgItem( hDlg2 , IDC_EDIT2)) //.... msg.hwnd =hDlg2;
//Je réalise le traitement normal des messages pour réaliser le traitement qui a dans IDC_BUTTON1 TranslateMessage(&msg);
DispatchMessage(&msg);
//Pareil quand j'appui sur tab je regarde
dans quelle dialog box je me trouve et si je suis dans la 2ème alors je
change de case !
}else if (msg.message= =WM_KEYDOWN && msg.wParam==VK_TAB){
if (msg.hwnd==GetDlgItem( hDlg2 , IDC_EDIT1))
PostMessage(hDlg2, WM_NEXTDLGCTL, 0, 0); //ctrl suivant if (msg.hwnd ==GetDlgItem(hDlg2, IDC_EDIT2))
PostMessage(hDlg2, WM_NEXTDLGCTL, 1, 0); //ctrl précédent
}else{
//Je réalise le traitement normal des messages dans les autres cas TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 18 oct. 2007 à 19:26
Salut,
Pour la première série de test, tu pourrais essayer de mettre en place
le handle de la fenêtre parente dans le message. De cette manière il
devrait mettre hDlg et hDlg2 sans même un if :
if (msg.message==WM_KEYDOWN && msg.wParam==VK_RETURN){
msg.message=WM_COMMAND;
msg.wParam=IDC_BUTTON1; //La touche entrée simule l'appui sur bouton
msg.hwnd = GetParent(msg.hwnd);
3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
The_Guardian
Messages postés317Date d'inscriptionvendredi 25 mai 2007StatutMembreDernière intervention19 octobre 20071 14 oct. 2007 à 12:51
Bonjour,
Ok pour rendre ça plus élégant, je ferais des fonctions genre tabIsPressed( ) et enterIsPressed( ) comme ça ça t'éviterait de faire du contrôle propre à l'application avec du contrôle de touches, mais bon au final tu auras tous tes if quand même..
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 14 oct. 2007 à 13:26
Enfet je cherche si possible à arranger surtout ça : msg.hwnd==GetDlgItem(hDlg2, IDC_EDIT1)
Y'a pas un moyen de savoir à quel hDlg appartient le msg.hwnd par exemple ? au lieu de faire la technique bourin que je fais de comparrer le msg.hwnd à tous mes controles ... parce que l'a j'en est 3 donc ça va mais si j'en est 20 ben bonjours les dégars ^^
The_Guardian
Messages postés317Date d'inscriptionvendredi 25 mai 2007StatutMembreDernière intervention19 octobre 20071 16 oct. 2007 à 12:12
Re,
Ah, là je peux te proposer une méthode qui s'éloigne un peu des composants particuliers, et faire un truc un peu plus général.
tu as un objet "o" que tu veux comparer à un ensemble d'objets "d1", "d2", "d3", ..., "dn"
Et donc tu pourrais utiliser une hashtable (tableau associatif) dans lequel tu remplis initialement tous tes "d1", "d2", etc.
Et c'est surtout pratique si la taille de ta hashtable est bien plus grand que ton "n"
Aussi, une autre solution c'est de mettre tout dans un arbre, et là tu te garantis une recherche rapide de ton "o" parmi tous les "d_i"
Soit plus clairement au lieu de faire :
if (o==d1) { ... }
if (o==d2) { ... }
je te proposerais de faire plutôt:
d = getD(o);
if (d!=NULL) { o = d; } // ou bien n'importe quelle fonction utilisant "d"
=
Une autruche ne se cuit pas aux petits lardons
Vous n’avez pas trouvé la réponse que vous recherchez ?