如何在MFC中的功能区文本框中实现数据验证

时间:2015-10-19 17:21:45

标签: c++ mfc ribbon

我正在更新旧应用以使用功能区。在一个地方,旧版本有一个按钮,打开一个小对话框,从用户获取数值。我尝试使用CMFCRibbonEdit将其替换为功能区上的文本框。对话框我试图替换使用过的DDX / DDV来控制用户输入。由于功能区托管在CMainFrame中,我想我只需要使用类向导向主框架添加DoDataExchange覆盖;然后从对话框中添加DDX / DDV代码的副本,只需更新数据成员/ id / etc值。但是,执行此操作后,当我对文本框的内容进行任何编辑或保留其焦点时,我的DoDataExchange方法不会被调用,也不会强制执行输入值限制。

void CMainFrame::DoDataExchange(CDataExchange* pDX)
{
    CFrameWndEx::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(CMainFrame)
    DDX_Text(pDX, ID_CALIBRATE_USER_DEFINED_EDIT, m_CalDistance);
    DDV_MinMaxInt(pDX, m_CalDistance, 0, 9999);
    //}}AFX_DATA_MAP
}

1 个答案:

答案 0 :(得分:1)

DoDataExchange / UpdateData是CWnd中的虚函数,但从不为CFrameWnd或CToolBar或CMFCMfcRibbonBar调用它。

您可以简单地覆盖CMFCRibbonRichEditCtrl :: OnKillFocus并在此管理所有验证。但你必须手动完成。

可以使UpdateData正常工作,但在这种情况下,功能区编辑控件的父级必须执行UpdateData,否则无法找到控件ID。请记住,当我在功能区中输入内容时,我不会期望对话框消息。我希望数据会自动更改为最小值或最大值。