您实际上必须在编辑一个元组,才能使该点表现出所需的效果。因此,如果我想将10.0.1.10更改为10.0.1.11,则必须键入“ 10.0.1.11”,因为该点的行为不像TAB。我只想输入“ ... 11”,但是点将被忽略,直到您编辑一个元组为止。 h!
关于如何进行这项工作的任何想法?
答案 0 :(得分:1)
默认情况下,除非光标位于子字段编辑控件的末尾,否则IP地址控件不会响应'.'
,只有这样,光标才会移至下一个字段。
在父窗口/对话框中覆盖PreTranslateMessage
以更改默认行为。下面的代码也为tab添加了可选支持。
BOOL CMyDialog::PreTranslateMessage(MSG *msg)
{
if(msg->message == WM_KEYDOWN)
{
CWnd *focus = GetFocus();
if(ip_address.IsChild(focus))
{
//don't proceed unless the field is set
if(focus->GetWindowTextLength() && (
msg->wParam == VK_DECIMAL ||
msg->wParam == VK_OEM_PERIOD ||
msg->wParam == VK_TAB))
{
//undocumented method to find the current field:
int field = GetWindowLongPtr(focus->m_hWnd, GWL_USERDATA);
//set focus to next field:
if(field >= 0 && field < 3)
{
ip_address.SetFieldFocus(field + 1);
return TRUE;
}
}
}
}
return CDialog::PreTranslateMessage(msg);
}