Visual c++ 向CEdit控件追加文本后出现奇怪的字体效果

Visual c++ 向CEdit控件追加文本后出现奇怪的字体效果,visual-c++,textbox,mfc,append,cedit,Visual C++,Textbox,Mfc,Append,Cedit,在注意到界面更新缓慢之后,我按照上的建议向CEdit控件添加文本 然后我换了 void CMyPropertyPage::Log(const CString& sLog) { CString str; m_cLogEdit.GetWindowText(str); if (!str.IsEmpty()) str += _T("\r\n"); str += sLog; m_cLogEdit.SetWindowText(str);

在注意到界面更新缓慢之后,我按照上的建议向CEdit控件添加文本

然后我换了

void CMyPropertyPage::Log(const CString& sLog)
{
    CString str;
    m_cLogEdit.GetWindowText(str);

    if (!str.IsEmpty())
        str += _T("\r\n");

    str += sLog;

    m_cLogEdit.SetWindowText(str);
    m_cLogEdit.LineScroll(m_cLogEdit.GetLineCount());
}

现在,当我运行它时,我注意到一个奇怪的字体模糊,因为它在图像中日志文本框的前两行中可见

原因是什么?我如何修复它

我解决了:)


似乎如果我暂时禁用重画,问题就消失了

您显示的代码没有问题。看起来您的系统或对话框上没有启用cleartype字体,所有字体看起来都很模糊。由于某些原因,编辑控件未正确重新绘制。看起来第一行画了4遍,第二行画了3遍。。。最后一行画了一次,背景没有重新画。显示对话框*.rc代码和其他信息来重现这种效果。这不是你说的方式吗?我完全按照您在我的代码中描述的方式和顺序看到它们!对不起,我有阅读障碍!这是正确的用法。您仍然希望仔细检查
OnEraseBkgnd
等的消息覆盖。如果有。将移动。
SetRedraw(TRUE)经过
行滚动()调用“使它更脆/更干净”?@franji1是的,这是有意义的,但现在一切都在正常工作!通常,
SetRedraw FALSE/TRUE
调用需要平衡/格式良好。它可能“工作”,但我会在调用
LineScroll
后尝试
SetRedraw(TRUE)
,看看它是否“正常”工作。如果您确实尝试了,但没有成功,我理解您不想添加
SetRedraw(TRUE)
调用。。
void CMyPropertyPage::Log(const CString& sLog)
{
    m_cLogEdit.SetSel(-1,-1);
    m_cLogEdit.ReplaceSel(sLog + L"\r\n");

    //m_cLogEdit.LineScroll(m_cLogEdit.GetLineCount());

    UpdateData(FALSE);
    UpdateWindow();
}
void CMyPropertyPage::Log(const CString& sLog)
{
    m_cLogEdit.SetRedraw(FALSE);

    m_cLogEdit.SetSel(-1,-1);
    m_cLogEdit.ReplaceSel(sLog + L"\r\n");

    m_cLogEdit.SetRedraw(TRUE);

    m_cLogEdit.LineScroll(m_cLogEdit.GetLineCount());

    UpdateData(FALSE);
    m_cLogEdit.UpdateWindow();
}