CEditView不显示文本

时间:2009-01-07 21:03:01

标签: c++ mfc

我有一个从CEditView派生的视图。它是只读的。我想将文本设置为一种日志记录,但屏幕上没有任何内容。如果我在temp之后检查调试器中的GetEditCtrl().GetWindowText(temp);我可以看到文本内部确实发生了变化,但我在屏幕上看不到任何内容。

// HistoryView.cpp : implementation file
//

#include "stdafx.h"
#include "HistoryView.h"


// CHistoryView

IMPLEMENT_DYNCREATE(CHistoryView, CEditView)

CHistoryView::CHistoryView()
{

}

CHistoryView::~CHistoryView()
{
}

BEGIN_MESSAGE_MAP(CHistoryView, CEditView)
END_MESSAGE_MAP()


// CHistoryView diagnostics

#ifdef _DEBUG
void CHistoryView::AssertValid() const
{
    CEditView::AssertValid();
}

#ifndef _WIN32_WCE
void CHistoryView::Dump(CDumpContext& dc) const
{
    CEditView::Dump(dc);
}
#endif
#endif //_DEBUG


// CHistoryView message handlers

void CHistoryView::OnInitialUpdate()
{
    CEditView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class
    GetEditCtrl().SetReadOnly(TRUE);
}

//!
/*!
*/
void CHistoryView::AddRow(CString message)
{
    CString temp;
    GetEditCtrl().GetWindowText(temp);

    if(temp.IsEmpty())
    {
        GetEditCtrl().SetWindowText(message);
    }
    else
    {
        GetEditCtrl().SetWindowText(temp + "\r\n" + message);
    }

    GetEditCtrl().LineScroll(2, 0);
    //GetEditCtrl().UpdateWindow(); // no effect
}

4 个答案:

答案 0 :(得分:2)

问题似乎存在于您发布的代码之外的某个地方。我使用从CEditView派生的视图创建了一个新的MFC应用程序,并且您用来添加文本的代码工作正常,尽管我必须将文字"\r\n"包装在显式临时CString中,如:

GetEditCtrl().SetWindowText(temp + CString("\r\n") + message);

答案 1 :(得分:2)

正如乔尔所说,问题出在其他地方。但是,你正在做的事情存在更大的问题。一旦向控件添加多行文本,从控件中复制文本,追加到字符串,然后设置文本将会有糟糕的性能。

过去,当我需要一个窗口来显示日志消息时,我创建了一个包含CListBox控件的视图。要添加行,请调用CListBox::AddString,然后当列表框达到某个最大行数时,请调用CListBox::DeleteString删除最旧的项目。这样,添加行总是很快,控件使用的内存量不会无限增长。

如果文字仅用于展示,而您不需要它可编辑,我建议您考虑使用CListBox

我希望这有帮助!

答案 2 :(得分:0)

除了ChrisN的回答,如果你想保留一个CEdit,你可以使用

// sets cursor to end of text
int nCurrentLength= GetEditCtrl().GetWindowTextLength();
GetEditCtrl().SetSel(nCurrentLength,nCurrentLength); 

// appends text
GetEditCtrl().ReplaceSel("\r\nMynew line"); 

答案 3 :(得分:0)

事实证明第三方UI工具包正在重建View(谁知道为什么?)所以我的指针是陈旧的。因此,我实际上刷新了不同的观点!