Modal dialog - Close - ESC
-
How to prevent a modal dialog from closing when we hit ESC key? Thanks in advance, Sarvan AL
See the FAQ 7.4 How do I prevent a dialog from closing when the user presses Enter or Esc?[^] --Mike-- Visual C++ MVP :cool: LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ Shots do not hurt other players... yet
-
The simplest solution is to override the
PreTranslateMessage()
! Within the handler, write this code...if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) wParam = NULL; //yeah you read it right!
Simple as pie :) Regards, Rajesh R. Subramanian You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.Have you ever made a pie before?
-Prakash
-
I would have only set a thread local hook - But regardless your solution is still the way to go. Steve
no hooks are needed to do this.
-Prakash
-
The other guys have a point - My solution was like killing a gnat with a sledgehammer. Perhaps just use the
GetAsyncKeyState
to see if the escape key is down in aOnCancel
overide.Going after a gnat with a sledgehammer is always fun! :)
ZeePain! wrote:
This seems like one of those programs that started small, grew incrementally, building internal pressure, and finally barfed all over its source code sneakers. Or something.
-
no hooks are needed to do this.
-Prakash
I think we've established that -
PreTranslateMessage
was the best solution - Assuming we're using MFC. Steve -
I think we've established that -
PreTranslateMessage
was the best solution - Assuming we're using MFC. StevePreTranslateMessage is good but did you consider http://www.codeproject.com/script/comments/forums.asp?msg=1338886&forumid=1647#xx1338886xx[^]
-Prakash
-
PreTranslateMessage is good but did you consider http://www.codeproject.com/script/comments/forums.asp?msg=1338886&forumid=1647#xx1338886xx[^]
-Prakash
much better, and very simple !!! thanks to mickael...
TOXCCT >>> GEII power
[toxcct][VisualCalc 2.20][VCalc 3.0 soon...] -
much better, and very simple !!! thanks to mickael...
TOXCCT >>> GEII power
[toxcct][VisualCalc 2.20][VCalc 3.0 soon...]toxcct wrote:
thanks to mickael...
no doubt. :)
-Prakash
-
PreTranslateMessage is good but did you consider http://www.codeproject.com/script/comments/forums.asp?msg=1338886&forumid=1647#xx1338886xx[^]
-Prakash
That approach seemed to stop the dialog box from begin closed by any means so I ruled it out. I don't actually remember him saying he uses MFC, but that seems to be assumed in this forum. I try to steer clear of MFC in my own projects although I use it extensively at work. The MFC source code is a valuable resource however. Steve
-
That approach seemed to stop the dialog box from begin closed by any means so I ruled it out. I don't actually remember him saying he uses MFC, but that seems to be assumed in this forum. I try to steer clear of MFC in my own projects although I use it extensively at work. The MFC source code is a valuable resource however. Steve
Stephen Hewitt wrote:
That approach seemed to stop the dialog box from begin closed by any means so I ruled it out.
you dont put for both onok and oncancel, just the oncancel will do in this case.
-Prakash
-
Stephen Hewitt wrote:
That approach seemed to stop the dialog box from begin closed by any means so I ruled it out.
you dont put for both onok and oncancel, just the oncancel will do in this case.
-Prakash
When I test just
OnCancel
and stopped it callingCDialog::OnCancel
the dialog can't be closed by any means other the pressing "OK". This includes the "x", the system menu and escape. Steve -
Stephen Hewitt wrote:
That approach seemed to stop the dialog box from begin closed by any means so I ruled it out.
you dont put for both onok and oncancel, just the oncancel will do in this case.
-Prakash
I knew this other solution well before I had posted the PreTranslateMessage handling solution. But it will just change the functionality of OnCancel() too. If i write my code in OnCancel(), not to close, then on clicking the cancel button too, the dialog won't close. Don't tell me you did not know this please. I might want to do something else on OnOk() too. Handling the pretranslatemessage is not a big job. And its powerful than any other way when you work with MFC. I cannot think of any other easier and powerful way to do this. If you know something else which is REALLY APPROPRIATE and RELEVANT, please let us know too. Thanks in advance. Regards, Rajesh R. Subramanian You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
-
much better, and very simple !!! thanks to mickael...
TOXCCT >>> GEII power
[toxcct][VisualCalc 2.20][VCalc 3.0 soon...]Tox, how is it much better? Do I write in thin air? If i edit OnCancel(), then will it not change the whole good functionality of the button? I accept, I edit the OnCancel() and the dialog won't close on pressing the Escape then what about clicking the cancel button dude? Don't tell me you did not know this. Please explain tox. I knew mike's solution already and still I think PreTranslateMessage is best. Regards, Rajesh R. Subramanian You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
-
See the FAQ 7.4 How do I prevent a dialog from closing when the user presses Enter or Esc?[^] --Mike-- Visual C++ MVP :cool: LINKS~! Ericahist | NEW!! PimpFish | CP SearchBar v3.0 | C++ Forum FAQ Shots do not hurt other players... yet
Hi Mike, Is handling the PreTranslateMessage() better or the one which you have given is better? How? My opinion is that when you write code inside the OnCancel() it will modify the functionality of the cancel button (and the close button of the window) too! Which in turn will stop the dialog from closing somehow.. Should another button be added to close then? Is this approach right? I am asking because I am a big fan of you and I need the reason behind your approach in this matter. Regards, Rajesh R. Subramanian You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
-
I knew this other solution well before I had posted the PreTranslateMessage handling solution. But it will just change the functionality of OnCancel() too. If i write my code in OnCancel(), not to close, then on clicking the cancel button too, the dialog won't close. Don't tell me you did not know this please. I might want to do something else on OnOk() too. Handling the pretranslatemessage is not a big job. And its powerful than any other way when you work with MFC. I cannot think of any other easier and powerful way to do this. If you know something else which is REALLY APPROPRIATE and RELEVANT, please let us know too. Thanks in advance. Regards, Rajesh R. Subramanian You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
it all depended on the design on the dialog box. Instead of traditional IDCANCEL a different id say ID_CANCEL button can be added to the dialog which could call the baseclass OnCancel to cancel the dialog. from your reply you look like pissed off, just chill baby.
-Prakash
-
it all depended on the design on the dialog box. Instead of traditional IDCANCEL a different id say ID_CANCEL button can be added to the dialog which could call the baseclass OnCancel to cancel the dialog. from your reply you look like pissed off, just chill baby.
-Prakash
Huh? I am not pissed or anything. I think its absolutely waste to rename ID_CANCEL and then write code inside that oncancel function and all. If it is Just for the sake to argue, you can continue to rename everything and modify functions. Its that you know what it is and still you want to rename something and then edit existing functionality or add a button separately to close,,,..... Phew! I am tired. I will continue to use Pretranslatemsg.
-
Huh? I am not pissed or anything. I think its absolutely waste to rename ID_CANCEL and then write code inside that oncancel function and all. If it is Just for the sake to argue, you can continue to rename everything and modify functions. Its that you know what it is and still you want to rename something and then edit existing functionality or add a button separately to close,,,..... Phew! I am tired. I will continue to use Pretranslatemsg.
:confused: Prakash is talking to me. What is ur problem You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
-
:confused: Prakash is talking to me. What is ur problem You have an apple and me too. We exchange those and We have an apple each. You have an idea and me too. We exchange those and We have two ideas each.
i had been reading this thread. i thought PreTranslateMessage() is better. i always use that only. he told anybody using PreTranslateMessage() is pissed. so i replied.
-
Huh? I am not pissed or anything. I think its absolutely waste to rename ID_CANCEL and then write code inside that oncancel function and all. If it is Just for the sake to argue, you can continue to rename everything and modify functions. Its that you know what it is and still you want to rename something and then edit existing functionality or add a button separately to close,,,..... Phew! I am tired. I will continue to use Pretranslatemsg.
wow, cool down, i didnt say using pretranslate message is a bad way of using it, Like I said it would all depend on the design of the dialog.
-Prakash
-
i had been reading this thread. i thought PreTranslateMessage() is better. i always use that only. he told anybody using PreTranslateMessage() is pissed. so i replied.
Aljechin he told anybody using PreTranslateMessage() is pissed.
talk about misinterpretation. ;)
-Prakash