Dialogs et Echap

Résolu
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 28 déc. 2004 à 20:12
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 28 déc. 2004 à 22:11
Bonsoir,

Je crée une Dialog avec DialogBoxParam à partir de ressources, et j'aimerais savoir comment désactiver la fermeture automatique de cette Dialog lorsque l'utilisateur appuie sur Echap. J'ai bien essayé de hooker localement WM_KEYDOWN, mais Echap est alors désactivée pour la totalité de l'application...

Merci d'avance pour votre aide ;-)

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 déc. 2004 à 21:32
Ben alors, vous avez pas encore plus complique ???
Suffit de traiter dans la dialogproc, exemple minimal:

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_INITDIALOG:
SetClassLong(hdlg, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
return 1;
case WM_SYSCOMMAND:
if(wParam == SC_CLOSE) EndDialog(hdlg, 0);
return 0;
}
return 0;
}

ciao...
BruNews, MVP VC++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 déc. 2004 à 20:46
Il suffit que tu appelles CallNextHookEx dans ton hook sauf si tu es dans le dialog
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
28 déc. 2004 à 20:57
Merci, mais j'ai trouvé une autre solution entre-temps : vérifier si le retour de GetForegroundWindow() est égal à mon hDlg.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 déc. 2004 à 21:53
Ah oui j'y avais pas pensé
Par défaut, WM_SYSCOMMAND avec SC_CLOSE, envoie un IDCANCEL au dialog, c'est ca?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 déc. 2004 à 21:58
s'il n'y a rien dans WM_COMMAND->IDCANCEL il ne se passera donc rien, pas de fermeture a cet endroit, voila tout.

ciao...
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 déc. 2004 à 22:04
Oui, c que je voulais dire c'est que quand on appuie sur la croix, ca envoie un IDCANCEL, mais quand on traite dans WM_SYSCOMMAND on récupère plus ce IDCANCEL, donc je disais que peut être c'est le WM_SYSCOMMAND qui envoie un IDCANCEL quand on ne le traite pas
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
28 déc. 2004 à 22:11
Mouarf, en effet je cherchais midi à quatorze heures... Merci !
0
Rejoignez-nous