Dialogs et Echap [Résolu]

Signaler
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Il suffit que tu appelles CallNextHookEx dans ton hook sauf si tu es dans le dialog
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Merci, mais j'ai trouvé une autre solution entre-temps : vérifier si le retour de GetForegroundWindow() est égal à mon hDlg.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Ah oui j'y avais pas pensé
Par défaut, WM_SYSCOMMAND avec SC_CLOSE, envoie un IDCANCEL au dialog, c'est ca?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Mouarf, en effet je cherchais midi à quatorze heures... Merci !