C++ 获取带下划线的文本作为字符串

C++ 获取带下划线的文本作为字符串,c++,mfc,text-editor,C++,Mfc,Text Editor,假设我有一个非常基本的文本编辑器,如下所述: 此文本编辑器能够创建、保存和打开包含以下格式化文本的文件: 知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡 现在想象一下斜体文本也加了下划线 有没有一种方法可以将上面段落中带下划线的文本的每个实例作为字符串 另外,是否有一种方法可以获取当前选定为字符串的任何文本?只是,我想向您展示几种方法之间

假设我有一个非常基本的文本编辑器,如下所述:

此文本编辑器能够创建、保存和打开包含以下格式化文本的文件:

知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡

现在想象一下斜体文本也加了下划线

有没有一种方法可以将上面段落中带下划线的文本的每个实例作为字符串


另外,是否有一种方法可以获取当前选定为字符串的任何文本?

只是,我想向您展示几种方法之间的线索

CHARFORMAT cf;
CString text;
GetDlgItemText(IDC_RICHEDIT21, text);

//loop for all text in rich edit control
for(int i = 0; i < text.GetLength(); i++)
{
    m_rich->SetSel(0 + i, i + 1); //from start to end character
    m_rich->GetSelectionCharFormat(cf);

    if(cf.dwEffects & CFE_UNDERLINE) //check whether underline character
    {
        //get underline character using GetSelText() etc.
    }
}
charcf格式;
CString文本;
GetDlgItemText(IDC_RICHEDIT21,text);
//丰富编辑控件中所有文本的循环
对于(int i=0;iSetSel(0+i,i+1);//从开始到结束字符
m_rich->GetSelectionCharFormat(cf);
if(cf.dwEffects&CFE_UNDERLINE)//检查是否给字符加下划线
{
//使用GetSelText()等获取下划线字符。
}
}
但是,这段代码不涉及性能的任何方面,所以如果富编辑控件中有许多字符串和带下划线的字符,则必须检查执行时间等。 另外,我认为xMRi的回答是基本和正确的方法

我还想推荐以下文章


是的,是的。阅读例如和的文档。嗨,Joachim,谢谢你的回复。虽然我找到了将当前选定文本作为字符串获取的方法(EM_GETSELTEXT)…但我似乎仍然无法找到如何将每个带下划线文本实例作为字符串获取的方法…我假设您得到的答案是CFont类,但我已经查看了文档,仍然无法找到答案。你能详细说明一下吗?以RTF格式输出文本。解析它。或者分析每个位置的格式,并找出格式是否包含下划线选项。xMRi-听起来效率很低…所以富文本控件中没有一种方法可以简化此过程?