Visual c++ Visual Studio MFC在键入/动态更改编辑控件中的文本 我试图在VisualStudio 2019中设置MFC C++应用程序,这样用户在输入文本时修改文本。 void Onsomebtnclick() { //convert CString to String of m_inputString //do some string manipulation //convert back to CString //SetDlgItemText(txtInputBox, result) }

Visual c++ Visual Studio MFC在键入/动态更改编辑控件中的文本 我试图在VisualStudio 2019中设置MFC C++应用程序,这样用户在输入文本时修改文本。 void Onsomebtnclick() { //convert CString to String of m_inputString //do some string manipulation //convert back to CString //SetDlgItemText(txtInputBox, result) },visual-c++,mfc,visual-studio-2019,editcontrol,Visual C++,Mfc,Visual Studio 2019,Editcontrol,当前布局为2个单选按钮 ID=rdbOn(设置为Group=True,值为int变量m_ision=1) ID=rdbOff,m_ision值将为=0 和1个编辑控件, ID=txtInputBox,带有值CString变量m\u inputString 目前,为了进行测试,我可以看到点击一个按钮,它将如何工作,它将采取以下类似的措施,只需对结果进行SetDlgItemText。但那将是在他们打字之后,而不是在他们打字的时候 void Onsomebtnclick() { //conv

当前布局为2个单选按钮

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

ID=
rdbOff
m_ision
值将为=
0

和1个编辑控件, ID=
txtInputBox
,带有值
CString
变量
m\u inputString

目前,为了进行测试,我可以看到点击一个按钮,它将如何工作,它将采取以下类似的措施,只需对结果进行
SetDlgItemText
。但那将是在他们打字之后,而不是在他们打字的时候

void Onsomebtnclick()
{
    //convert CString to String of m_inputString
    //do some string manipulation
    //convert back to CString
    //SetDlgItemText(txtInputBox, result)    
}
更新: 我能够从user@GoGoWorx获得
EN_CHANGE
标志建议。但是,现在我有一个小问题,光标回到编辑控件的开头
txtInput

我正在阅读关于使用一个
CEdit::SetSel
,但不知道如何在我的代码中直接使用它。我试过了


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

我不确定编辑控件的数字标识符使用的是什么,因为它们通常是大写定义-将上面的
IDC\u edit\u控件
替换为您的定义(可能是
txtInputBox
,但它们通常是大写,所以我不确定)

还可以将对话框类的名称更改为
CMyDialog

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

控制文档的
CEdit
备注部分描述了消息映射处理程序:

考虑到您对在用户键入时修改内容的担忧,这应该没问题,因为每次更改(击键或从剪贴板粘贴等)都会触发调用此处理程序,您可以根据需要进行任何更改。只需确保在更新控件时,不会再次触发\u EN\u CHANGE
上的
,并以递归“CHANGE”循环结束

您可以使用某种标志来完成此操作,以指示您是更新控件的人,而不是用户,但是最好将
CEdit
控件子类化,以完成您想要的操作。有几个例子说明了如何做到这一点(这并不像听起来那么难),例如:

您好@GoGoWorx,谢谢您的指导。我开始研究EN_的变化,你也说得对,我的编辑控件是txtInputBox。现在我意识到一些问题,因为我正在努力改变我的想法,并且已经更新了原始帖子。您使用SetSet()的方法是正确的,但是由于您并没有真正尝试选择任何内容,所以只需将光标(插入符号)移动到某个位置即可。这是通过选择选择长度为0的所需位置来控制的,因此在您的情况下,您可能希望获得新文本的长度以设置选择位置的“开始”,然后选择的结束将是相同的(因此选择了0个字符)res_len=strlen(结果);TXInputBox.SetSel(分辨率、分辨率);
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
}