Странное поведение CIPAddressCtrl
Итак, навскидку:
1) WM_KILLFOCUS приходит всякий раз, когда внутри контрола меняется активная цифра.
2) WM_CHAR ваще не приходит.
Можно ли это как-то обойти? Имеющийся на данный момент результат напрочь неюзабелен. Как получить-таки WM_CHAR и поймать тот факт, что весь контрол потерял фокус ввода?
Цитата:
Is an IP Address Control an Edit Control?
An IP address control is not an edit control and it will not respond to EM_ messages. It will, however, send the owner window the following edit control notifications through the WM_COMMAND message. Note that the IP address control will also send private IPN_ notifications through the WM_NOTIFY message.
Notification Reason for notification
EN_SETFOCUS Sent when the IP address control gains the keyboard focus.
EN_KILLFOCUS Sent when the IP address control loses the keyboard focus.
EN_CHANGE Sent when any field in the IP address control changes. Like the EN_CHANGE notification from a standard edit control, this notification is received after the screen has been updated.
An IP address control is not an edit control and it will not respond to EM_ messages. It will, however, send the owner window the following edit control notifications through the WM_COMMAND message. Note that the IP address control will also send private IPN_ notifications through the WM_NOTIFY message.
Notification Reason for notification
EN_SETFOCUS Sent when the IP address control gains the keyboard focus.
EN_KILLFOCUS Sent when the IP address control loses the keyboard focus.
EN_CHANGE Sent when any field in the IP address control changes. Like the EN_CHANGE notification from a standard edit control, this notification is received after the screen has been updated.
MSDN & RTFM
Насколько я понял этот контрол - это четыре edit'а внутри одной рамки, между ними точки нарисованы. Ведет себя соответственно.
Так че, писать свой IPAddressControl?
А че надо - то? Есть ведь еще PreTranslateMessage
1. Узнать, когда фокус покинет весь контрол, а не перейдет из поля в поле.
2. Получить нажатия клавиш.
Так проверяй от какого окна приходит килфокус. Если от ячейки - значит ок, если от айпи контрола - игнор.