Hello,
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Merci.
--
Aurélien REGAT-BARREL
Hello,
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Merci.
--
Aurélien REGAT-BARREL
Hello,
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Merci.
--
Aurélien REGAT-BARREL
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains
messages claviers.
Question : comment créer avec CreateDialog une boite modale ?
(ou comment utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne
la "modalité" ?
So before Wine was created, anything which uses a Windows library was
a derivative of Windows?
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains
messages claviers.
Question : comment créer avec CreateDialog une boite modale ?
(ou comment utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne
la "modalité" ?
So before Wine was created, anything which uses a Windows library was
a derivative of Windows?
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains
messages claviers.
Question : comment créer avec CreateDialog une boite modale ?
(ou comment utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne
la "modalité" ?
So before Wine was created, anything which uses a Windows library was
a derivative of Windows?
> La modalité repose sur un Hook. Quel est le message que tu veux
intercepter pendant la modalité ?
> La modalité repose sur un Hook. Quel est le message que tu veux
intercepter pendant la modalité ?
> La modalité repose sur un Hook. Quel est le message que tu veux
intercepter pendant la modalité ?
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
Si on veut un dialog modal on utilise DialogBox.
Si on en veut pas c'est CreateDialog + sa boucle des msg.
Pblm : DialogBox appelle IsDialogMessage ce qui filtre certains messages
claviers.
Question : comment créer avec CreateDialog une boite modale ? (ou comment
utiliser DialogBox sans IsDialogMessage ?)
Plus généralement, disons avec CreateWindow, comment fonctionne la
"modalité" ?
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> "modalité" ?
Une fenêtre modale lance sa propre pompe à message
(GetMessage/TranslateMessage/DispatchMessage) à l'intérieur d'un
handler de message de la fenêtre parente. Tu te retrouves donc, dans
la pile d'appel, avec 2 pompes à messages : celle de la fenetre
modale, en haut de la pile, qui tourne effectivement et traîte les
messages, et celle de la fenêtre parente, plus bas dans la pile, qui
est bloquée dans un appel à DispatchMessage. 'est ce qui explique que
la fenêtre parente soit "figée" : elle ne peut plus recevoir et
traiter de messages de fenêtres.
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> "modalité" ?
Une fenêtre modale lance sa propre pompe à message
(GetMessage/TranslateMessage/DispatchMessage) à l'intérieur d'un
handler de message de la fenêtre parente. Tu te retrouves donc, dans
la pile d'appel, avec 2 pompes à messages : celle de la fenetre
modale, en haut de la pile, qui tourne effectivement et traîte les
messages, et celle de la fenêtre parente, plus bas dans la pile, qui
est bloquée dans un appel à DispatchMessage. 'est ce qui explique que
la fenêtre parente soit "figée" : elle ne peut plus recevoir et
traiter de messages de fenêtres.
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> "modalité" ?
Une fenêtre modale lance sa propre pompe à message
(GetMessage/TranslateMessage/DispatchMessage) à l'intérieur d'un
handler de message de la fenêtre parente. Tu te retrouves donc, dans
la pile d'appel, avec 2 pompes à messages : celle de la fenetre
modale, en haut de la pile, qui tourne effectivement et traîte les
messages, et celle de la fenêtre parente, plus bas dans la pile, qui
est bloquée dans un appel à DispatchMessage. 'est ce qui explique que
la fenêtre parente soit "figée" : elle ne peut plus recevoir et
traiter de messages de fenêtres.
> DialogBox() appelle DialogBoxParam() qui disable la owner et la
re-enable en sortie.
Entre les 2, elle fait, principalement, une boucle sur PeekMessage()
-IsDialogMessage()-TranslateMessage()-DispatchMessage(), en testant des
cas particuliers comme WM_SYSKEYDOWN ou timers.
Pour DialogBox() & WM_KEYDOWN, WH_MSGFILTER hook (KB72219, ...)
> DialogBox() appelle DialogBoxParam() qui disable la owner et la
re-enable en sortie.
Entre les 2, elle fait, principalement, une boucle sur PeekMessage()
-IsDialogMessage()-TranslateMessage()-DispatchMessage(), en testant des
cas particuliers comme WM_SYSKEYDOWN ou timers.
Pour DialogBox() & WM_KEYDOWN, WH_MSGFILTER hook (KB72219, ...)
> DialogBox() appelle DialogBoxParam() qui disable la owner et la
re-enable en sortie.
Entre les 2, elle fait, principalement, une boucle sur PeekMessage()
-IsDialogMessage()-TranslateMessage()-DispatchMessage(), en testant des
cas particuliers comme WM_SYSKEYDOWN ou timers.
Pour DialogBox() & WM_KEYDOWN, WH_MSGFILTER hook (KB72219, ...)
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> > "modalité" ?
>
<...>
Donc que ce soit dans la 1° ou la 2° boucle, c'est kifkif, les message de
fenêtre parent sont envoyés à cette dernière, donc je pige pas pourquoi
est "figée".
Elle l'est pas vraiment en fait, car si tu cliques dessus, tu as la boite
modale qui "flash", ca fait "ding ding", et surtout elle reçoit toujours
WM_PAINT.
Ca ressemble plutot à du disabled comme l'ont dit certains.
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> > "modalité" ?
>
<...>
Donc que ce soit dans la 1° ou la 2° boucle, c'est kifkif, les message de
fenêtre parent sont envoyés à cette dernière, donc je pige pas pourquoi
est "figée".
Elle l'est pas vraiment en fait, car si tu cliques dessus, tu as la boite
modale qui "flash", ca fait "ding ding", et surtout elle reçoit toujours
WM_PAINT.
Ca ressemble plutot à du disabled comme l'ont dit certains.
> > Plus généralement, disons avec CreateWindow, comment fonctionne la
> > "modalité" ?
>
<...>
Donc que ce soit dans la 1° ou la 2° boucle, c'est kifkif, les message de
fenêtre parent sont envoyés à cette dernière, donc je pige pas pourquoi
est "figée".
Elle l'est pas vraiment en fait, car si tu cliques dessus, tu as la boite
modale qui "flash", ca fait "ding ding", et surtout elle reçoit toujours
WM_PAINT.
Ca ressemble plutot à du disabled comme l'ont dit certains.
> Il y a plusieurs trucs à considérer :
0) La fenêtre modale a sa vie encadrée par une fonction qui inclut une
à message, afin de bloquer le thread qui l'invoque sans paralyser
l'application.
1) Les fenêtres parentes de la même application (et a fortiori des autres)
continuent donc à traiter leurs messages (la preuve c'est qu'elles se
retracent quand on déplace la fenêtre modale).
2) La fenêtre modale peut capturer la souris au niveau de l'application
éviter que les fonctionnalités de changement du curseur des fenêtres
parentes ne soient exécutées.
3) La fenêtre modale a la possibilité de refuser de perdre le focus (elle
reçoit normalement un WM_KILLFOCUS avant que la prétendante ne reçoive le
WM_SETFOCUS correspondant).
4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
responsabilité de gérer ce dialogue et de décider de sa propre fin (fin de
la modalité et destruction de la fenêtre).
5) En fait quand j'ai dû coder ça à la main avec des fenêtres "normales",
fut la partie la plus complexe : gérer correctement les "dlg codes" pour
faire tourner le focus selon la norme entre les contrôles de la fenêtre,
sachant que l'effet d'une touche dépend de la nature du contrôle ayant le
focus, et que les réponses normalisées au message WM_GETDLGCODE (si je me
souviens bien) ont des noms assez peu explicites.
En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu dans
code des MFC pour rassembler les pièces du puzzle...
> Il y a plusieurs trucs à considérer :
0) La fenêtre modale a sa vie encadrée par une fonction qui inclut une
à message, afin de bloquer le thread qui l'invoque sans paralyser
l'application.
1) Les fenêtres parentes de la même application (et a fortiori des autres)
continuent donc à traiter leurs messages (la preuve c'est qu'elles se
retracent quand on déplace la fenêtre modale).
2) La fenêtre modale peut capturer la souris au niveau de l'application
éviter que les fonctionnalités de changement du curseur des fenêtres
parentes ne soient exécutées.
3) La fenêtre modale a la possibilité de refuser de perdre le focus (elle
reçoit normalement un WM_KILLFOCUS avant que la prétendante ne reçoive le
WM_SETFOCUS correspondant).
4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
responsabilité de gérer ce dialogue et de décider de sa propre fin (fin de
la modalité et destruction de la fenêtre).
5) En fait quand j'ai dû coder ça à la main avec des fenêtres "normales",
fut la partie la plus complexe : gérer correctement les "dlg codes" pour
faire tourner le focus selon la norme entre les contrôles de la fenêtre,
sachant que l'effet d'une touche dépend de la nature du contrôle ayant le
focus, et que les réponses normalisées au message WM_GETDLGCODE (si je me
souviens bien) ont des noms assez peu explicites.
En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu dans
code des MFC pour rassembler les pièces du puzzle...
> Il y a plusieurs trucs à considérer :
0) La fenêtre modale a sa vie encadrée par une fonction qui inclut une
à message, afin de bloquer le thread qui l'invoque sans paralyser
l'application.
1) Les fenêtres parentes de la même application (et a fortiori des autres)
continuent donc à traiter leurs messages (la preuve c'est qu'elles se
retracent quand on déplace la fenêtre modale).
2) La fenêtre modale peut capturer la souris au niveau de l'application
éviter que les fonctionnalités de changement du curseur des fenêtres
parentes ne soient exécutées.
3) La fenêtre modale a la possibilité de refuser de perdre le focus (elle
reçoit normalement un WM_KILLFOCUS avant que la prétendante ne reçoive le
WM_SETFOCUS correspondant).
4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
responsabilité de gérer ce dialogue et de décider de sa propre fin (fin de
la modalité et destruction de la fenêtre).
5) En fait quand j'ai dû coder ça à la main avec des fenêtres "normales",
fut la partie la plus complexe : gérer correctement les "dlg codes" pour
faire tourner le focus selon la norme entre les contrôles de la fenêtre,
sachant que l'effet d'une touche dépend de la nature du contrôle ayant le
focus, et que les réponses normalisées au message WM_GETDLGCODE (si je me
souviens bien) ont des noms assez peu explicites.
En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu dans
code des MFC pour rassembler les pièces du puzzle...
> 2) La fenêtre modale peut capturer la souris au niveau de l'application
pour
> éviter que les fonctionnalités de changement du curseur des fenêtres
> parentes ne soient exécutées.
C'est pas plus simple via un disable ?
Question : comment restreins-tu un SetCapture "au niveau de l'application"
> 4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
> responsabilité de gérer ce dialogue et de décider de sa propre fin (fin
> la modalité et destruction de la fenêtre).
Ok.
> 5) En fait quand j'ai dû coder ça à la main avec des fenêtres
ce
> fut la partie la plus complexe : gérer correctement les "dlg codes" pour
> faire tourner le focus selon la norme entre les contrôles de la fenêtre,
> sachant que l'effet d'une touche dépend de la nature du contrôle ayant
> focus, et que les réponses normalisées au message WM_GETDLGCODE (si je
> souviens bien) ont des noms assez peu explicites.
Pourquoi ne pas avoir utilisé IsDialogMessage ?
> En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu
le
> code des MFC pour rassembler les pièces du puzzle...
Ben j'ai fouillé dans le code de ReactOS, mais je n'ai pas trouvé la
lumière.
> 2) La fenêtre modale peut capturer la souris au niveau de l'application
pour
> éviter que les fonctionnalités de changement du curseur des fenêtres
> parentes ne soient exécutées.
C'est pas plus simple via un disable ?
Question : comment restreins-tu un SetCapture "au niveau de l'application"
> 4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
> responsabilité de gérer ce dialogue et de décider de sa propre fin (fin
> la modalité et destruction de la fenêtre).
Ok.
> 5) En fait quand j'ai dû coder ça à la main avec des fenêtres
ce
> fut la partie la plus complexe : gérer correctement les "dlg codes" pour
> faire tourner le focus selon la norme entre les contrôles de la fenêtre,
> sachant que l'effet d'une touche dépend de la nature du contrôle ayant
> focus, et que les réponses normalisées au message WM_GETDLGCODE (si je
> souviens bien) ont des noms assez peu explicites.
Pourquoi ne pas avoir utilisé IsDialogMessage ?
> En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu
le
> code des MFC pour rassembler les pièces du puzzle...
Ben j'ai fouillé dans le code de ReactOS, mais je n'ai pas trouvé la
lumière.
> 2) La fenêtre modale peut capturer la souris au niveau de l'application
pour
> éviter que les fonctionnalités de changement du curseur des fenêtres
> parentes ne soient exécutées.
C'est pas plus simple via un disable ?
Question : comment restreins-tu un SetCapture "au niveau de l'application"
> 4) La fenêtre modale, quand elle représente une boîte de dialogue, a la
> responsabilité de gérer ce dialogue et de décider de sa propre fin (fin
> la modalité et destruction de la fenêtre).
Ok.
> 5) En fait quand j'ai dû coder ça à la main avec des fenêtres
ce
> fut la partie la plus complexe : gérer correctement les "dlg codes" pour
> faire tourner le focus selon la norme entre les contrôles de la fenêtre,
> sachant que l'effet d'une touche dépend de la nature du contrôle ayant
> focus, et que les réponses normalisées au message WM_GETDLGCODE (si je
> souviens bien) ont des noms assez peu explicites.
Pourquoi ne pas avoir utilisé IsDialogMessage ?
> En fait les fonctions "dialog" automatisent tout ça. Fouillez un peu
le
> code des MFC pour rassembler les pièces du puzzle...
Ben j'ai fouillé dans le code de ReactOS, mais je n'ai pas trouvé la
lumière.