visual-c++ - Visual Studio MFC 在键入/动态时更改编辑控件中的文本

标签 visual-c++ mfc visual-studio-2019 editcontrol

我正在尝试在 Visual Studio 2019 中设置 MFC C++ 应用程序,以便在用户键入时修改用户的文本。

当前布局是 2 个单选按钮,

ID= rdbOn(设置为 Group = True,值 int 变量 m_isOn = 1)

ID= rdbOffm_isOn 值为 = 0

Layout

和 1 个编辑控件, ID= txtInputBox,值 CString 变量 m_inputString

目前,为了进行测试,我可以了解单击按钮时它如何工作,它需要类似于以下内容的内容,并且只需 SetDlgItemText 结果。但这是在他们打字之后,而不是在他们打字的时候。

void Onsomebtnclick()
{
    //convert CString to String of m_inputString
    //do some string manipulation
    //convert back to CString
    //SetDlgItemText(txtInputBox, result)    
}

更新: got EN_CHANGE to work 我能够使用来自用户 @GoGoWorx 的标志建议来处理 EN_CHANGE 。但是,现在我遇到了一个小问题,光标回到了编辑控件 txtInput 的开头。
我正在阅读有关使用 CEdit::SetSel 的内容,但不知道如何直接在我的代码中使用它。我试过 CEdit control MFC, placing cursor to end of string after SetWindowText

someDlg::someFunction()
{
    //some logic stuff to get a result string
    SetDlgItemText(txtInputBox, result);
    //need it to set the cursor to the end
    //I tried these, but it didn't recognize (expression must have class type?)
    //txtInputBox.SetSel(0, -1);
    //txtInputBox.SetSel(-1);
}

最佳答案

听起来您需要使用ON_EN_CHANGE消息映射通知(例如,在由于键入或粘贴而更新控件后调用)

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)   
    ON_EN_CHANGE(IDC_EDIT_CONTROL, &CMyDialog::OnEnChangeEditControl)
END_MESSAGE_MAP()

void CMyDialog::OnEnChangeEditControl()
{
   // Copy or call your Onsomebtnclick() here
}

我不确定您使用什么作为编辑控件的数字标识符,因为这些通常是大写定义 - 将上面的 IDC_EDIT_CONTROL 替换为您的定义(可能是 txtInputBox,但同样,这些通常是大写,所以我不确定)。

同时将 CMyDialog 更改为对话框类的名称。

请注意,我们使用的是 ON_EN_CHANGE这里的消息映射处理程序而不是 ON_EN_UPDATE,因为 ON_EN_CHANGE 消息是在控件更新后发送的,而 ON_EN_UPDATE 在更新之前被调用。

CEdit 控件文档的备注部分描述了消息映射处理程序: https://learn.microsoft.com/en-us/cpp/mfc/reference/cedit-class?view=msvc-160

关于您在用户输入时修改内容的担忧 - 这应该没问题,因为每次更改(击键或从剪贴板粘贴等)都应该触发此处理程序被调用,您可以在其中更改您需要的任何内容。只要确保更新控件时,不会再次触发 ON_EN_CHANGE 并最终陷入递归“更改”循环。

您也许可以使用某种标志来执行此操作,以表明您是更新控件的人,而不是用户,但是最好将 CEdit 控件子类化来执行此操作你想要什么。有一些示例说明如何执行此操作(这并不像听起来那么困难),例如: https://www.codeproject.com/Articles/27376/Avoiding-EN-CHANGE-notifications

关于visual-c++ - Visual Studio MFC 在键入/动态时更改编辑控件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65132174/

相关文章:

c++ - 如何实现这种风格的用户界面?

visual-studio - asp.net core "The Application Url cannot contain a query string or fragment"错误

c# - dotnet 运行报告 '.NETFramework,Version=v4.8 were not found'

c++ - C26451 访问 CStringArray 中的项目时发生算术溢出

c++ - 对 C++ 异常处理很困惑

c++ - 将 std::list<std::unique_ptr> 移动到 vector 中尝试引用已删除的函数

c++ - 你如何在 C++ 中将 UINT8 转换为 UINT32?

visual-studio-2008 - 检查所有库和 dll 是否来自同一个版本?

c++ - CTypedPtrArray 和 CArray 的区别

c++ - 快速将 "MFC Extension DLL"转换为 "Regular DLL with MFC statically linked"