如何获取CIPAddressCtrl以支持使用句点在元组字段之间进行制表

时间:2018-10-26 15:24:59

标签: mfc

您实际上必须在编辑一个元组,才能使该点表现出所需的效果。因此,如果我想将10.0.1.10更改为10.0.1.11,则必须键入“ 10.0.1.11”,因为该点的行为不像TAB。我只想输入“ ... 11”,但是点将被忽略,直到您编辑一个元组为止。 h!

关于如何进行这项工作的任何想法?

1 个答案:

答案 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);
}