gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:37:26 25 4
gpt4 key购买 nike

我正在更新旧应用以使用功能区。在一个地方,旧版本有一个按钮,可以打开一个小对话框,从用户那里获取一个数值。我正在尝试使用 CMFCRibbonEdit 将其替换为功能区上的文本框。我试图替换的对话框使用 DDX/DDV 来控制用户输入。由于功能区托管在 CMainFrame 中,我想我只需要使用类向导将 DoDataExchange 覆盖添加到主框架;然后从对话框中添加 DDX/DDV 代码的拷贝,并仅更新数据成员/id/等值。但是,在执行此操作后,当我对文本框的内容进行任何编辑或离开其焦点时,我的 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
}

最佳答案

DoDataExchange/UpdateData 是 CWnd 中的一个虚函数,但它永远不会为 CFrameWnd 或 CToolBar 或 CMFCMfcRibbonBar 调用。

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

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

关于c++ - 如何在 MFC 的功能区文本框中实现数据验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33220326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com