Edit Focus
George Grodentzik -- george@adsc.com
Friday, February 09, 1996
I am trying to return focus to an edit control after the kill focus
has determined there is an error. MFC has no pre kill focus message.
How can I prevent the next set focus keeping in mind that it is the
next set focus which causes the previous edit controls kill focus. I
would appreciate any ideas and sample code. I have experimented with
pretranslate messages but seem to have problems between views.
Thank you in advance
Kit Kauffmann -- kitk@mudshark.sunquest.com
Monday, February 12, 1996
>I am trying to return focus to an edit control after the kill focus
>has determined there is an error. MFC has no pre kill focus message.
>How can I prevent the next set focus keeping in mind that it is the
>next set focus which causes the previous edit controls kill focus. I
>would appreciate any ideas and sample code. I have experimented with
>pretranslate messages but seem to have problems between views.
>
>Thank you in advance
>
I did this (published a complete MFC class in first issue of VC++ Developer)
in a somewhat different way, by using the parental killfocus notification
messages, such as EN_KILLFOCUS, LBN_KILLFOCUS, etc. by:
1. Posting a (user-defined) message to perform validation with the HWND of
the control (anything else doesn't allow focus processing to complete, a
problem with all the focus messages - you can't use SetFocus from any of them.)
2. Responding to the message posted in #1 by validating the given HWND and
then, if necessary, posting a WM_NEXTDLGCTL message (much more usable than
SetFocus in such situations) to get the focus back to the offending control.
My code required you to override WindowProc and check for WM_COMMAND's with
the appropriate killfocus messages, rather than creating message maps for
all the possible controls, which would be rather error-prone (or actually,
just pass the message to a function which checks for them).
I also checked that the parent of the window getting the focus is also the
parent of the offending control, since applications which force you to
validate when you are moving to another app are VERY annoying.
Furthermore, I checked a list (which each window could augment) of windows
on which you don't want validation to occur (IDCANCEL, for example). If you
have a button which puts today's date in an edit control, you don't want the
user to be forced to enter a valid date in order to press the 'Today' button.
Code for this can be retrieved from my ftp site (I hope - somebody said they
were having problems with my site):
mudshark.sunquest.com in file pub\kitk\validate.zip
HTH!
| Вернуться в корень Архива
|