【问题标题】:Strange font effect after when appending text to CEdit control将文本附加到 CEdit 控件后出现奇怪的字体效果
【发布时间】:2019-04-30 17:46:00
【问题描述】:

在注意到界面更新缓慢后,我按照CEdit SetWindowText rediculously slow 上的建议将文本附加到 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());
}

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();
}

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

是什么原因,我该如何解决?

【问题讨论】:

  • 您显示的代码没有任何问题。看起来您的系统或对话框上没有启用 cleartype 字体,所有字体看起来都很模糊。由于某种原因,编辑控件未正确重绘。看起来第一行画了4次,第二行画了3次……最后一行画了一次,背景没有重画。显示对话框 *.rc 代码和其他信息以重现此效果。

标签: visual-c++ textbox mfc append cedit


【解决方案1】:

我解决了:)

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();
}

如果我暂时禁用重绘,问题就消失了!

【讨论】:

  • 这不是你说的吗?我完全按照您在我的代码中描述的方式和顺序看到它们!
  • 对不起,我有阅读障碍!这才是正确的用法。如果有的话,您仍然想仔细检查 OnEraseBkgnd 等的消息覆盖。
  • 将 .SetRedraw(TRUE); 移到 LineScroll(); 调用之后是否会使其更清晰/更清晰?
  • @franji1 是的,这很有意义,但现在一切正常!
  • 通常情况下,SetRedraw FALSE/TRUE 调用需要平衡/格式良好。它可能“工作”,但我会通过在LineScroll 调用之后尝试SetRedraw(TRUE) 来查看它是否“正确”工作。如果您尝试过但没有成功,我知道您不想添加SetRedraw(TRUE) 电话..
猜你喜欢
  • 2016-01-26
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多