在线等:CEditView不能自动刷新

KWHOK 2009-09-24 12:09:58
我的工程时SDI的,有三个视图窗口,其中一个是用来显示文字提示信息的,继承CEditView:

class MyShowView : public CEditView
{
}

程序启动时,ShowView里已经显示若干文字, 但当该程序窗口被覆盖时,比如,开一个IE浏览器,盖住程序窗口,
然后再点击窗口使其显露出来, 此时ShowView里文字不能显示出来, 只有用鼠标去全选它,才能看到,

按照我的想法, 当窗口由被盖住到显露出来时,系统会发送WM_ONPAINT消息,告诉整个窗口重绘,自然也包括ShowView
里的文字。。。。

不知为什么不行!

各位帮忙!
...全文
204 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
KWHOK 2009-09-24
  • 打赏
  • 举报
回复
呵呵,没有设置任何颜色,就是默认黑色的,

显示不出来的时候,我用鼠标全选,所有文字被蓝色的覆盖,表示被选中,然后随便单击鼠标,
使其不被选中,此时也能正常显示!

问题就是:只有窗口有一部分被覆盖住,再使其显示出来,则文字就不能自动刷新,显示出来
muzizongheng 2009-09-24
  • 打赏
  • 举报
回复
如果您能捕获 wm_paint消息的话, 那么我怀疑是你的字体颜色为白色。。。。。。呵呵。
KWHOK 2009-09-24
  • 打赏
  • 举报
回复
11#的,

“MyShowView 调用Invalidate();触发ONPAIN”

然后呢。。。?不太明白
churenxh 2009-09-24
  • 打赏
  • 举报
回复
MyShowView 调用Invalidate();触发ONPAIN
KWHOK 2009-09-24
  • 打赏
  • 举报
回复

贴上我的代码:
里面有很注释掉的,是我测试的代码,都不行
另外,又做了一个测试,似乎在SDI下,一个doc对应多个view下, 如果这个view继承CEditView似乎
就有更新问题, 也不确定……

等下加分!


/////////////////////////////////////////////////////////////////////////////
// MyShowView

IMPLEMENT_DYNCREATE(MyShowView, CEditView)

MyShowView::MyShowView()
{

}

MyShowView::~MyShowView()
{
}

BEGIN_MESSAGE_MAP(MyShowView, CEditView)
//{{AFX_MSG_MAP(MyShowView)
ON_WM_PAINT()
ON_MESSAGE(WM_UPDATE_STATUS_TIP, OnUpdateStatusTip)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MyShowView drawing

void MyShowView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();

// CEdit &editCtrl = this->GetEditCtrl();
// int len = editCtrl.GetWindowTextLength();
// if(len>0)
// {
// CString str;
// editCtrl.GetWindowText(str);
//
// editCtrl.SetSel(0, -1);
// editCtrl.Clear();
//
// editCtrl.SetWindowText(str);
// }

//PostMessage(WM_UPDATE_STATUS_TIP, 1, 0);


// TODO: add draw code here
//old
// CEdit &editCtrl=this->GetEditCtrl();
// int len = editCtrl.GetWindowTextLength();
//
// CString showStr="";
// while(pDoc->m_tipsStart != pDoc->m_tipsEnd)
// {
// showStr += "\r\n"+pDoc->m_tips[pDoc->m_tipsStart];
// pDoc->m_tipsStart = (pDoc->m_tipsStart+1)%TIPS_BUFF_CNT;
// }
//
//// editCtrl.SetSel(len-1, len);
//// editCtrl.Clear();
//// len = editCtrl.GetWindowTextLength();
// editCtrl.SetSel(len, len);
//
// editCtrl.ReplaceSel(showStr+"\r\n...");
}


//更新打印的提示信息, 这里做了消息映射,由另一个view发送更新消息
LRESULT
MyShowView::OnUpdateStatusTip(WPARAM wParam, LPARAM lParam)
{
CMyDoc* pDoc = GetDocument();
CEdit &editCtrl=this->GetEditCtrl();
int len = editCtrl.GetWindowTextLength();

CString showStr="";
while(pDoc->m_tipsStart != pDoc->m_tipsEnd)
{
showStr += pDoc->m_tips[pDoc->m_tipsStart]+"\r\n";
pDoc->m_tipsStart = (pDoc->m_tipsStart+1)%TIPS_BUFF_CNT;
}
editCtrl.SetSel(len, len);
editCtrl.ReplaceSel(showStr);
//editCtrl.Invalidate(false);

return 0L;
}

BOOL MyShowView::PreCreateWindow(CREATESTRUCT& cs)
{
//MyShowView.TextOut()

// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CEditView::PreCreateWindow(cs);
}
// MyShowView message handlers

void MyShowView::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
this->OnDraw(&dc);

// for test
//this->GetEditCtrl().Invalidate(false);

// Do not call CEditView::OnPaint() for painting messages
}

void MyShowView::OnInitialUpdate()
{
//CEditView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class

GetDocument()->pMyShowView = this;
GetEditCtrl().SetReadOnly(true);
}
Ghost90 2009-09-24
  • 打赏
  • 举报
回复
在里MyShowView 调用Invalidate();如果文字变白应该是OnPaint的事
oktsl 2009-09-24
  • 打赏
  • 举报
回复
我的richedit可没有这种问题哦
lgogo 2009-09-24
  • 打赏
  • 举报
回复
最好是帖些代码,要不然没办法判断
Ghost90 2009-09-24
  • 打赏
  • 举报
回复
当窗口由被盖住到显露出来时,系统会发送WM_ONPAINT消息,告诉整个窗口重绘。
是这样的,是不是OnPaint函数里把文字的颜色改了,或是其他地方把文字颜色改了
KWHOK 2009-09-24
  • 打赏
  • 举报
回复
回复3#, 这个不可能,因为其他正常

回复4#, 确实是刷新问题,不然怎么显示不出来呢,
你说的updatevalue()这个是什么,似乎CEdit没这个方法


另外,我的View继承CEditView, 对应的doc还是普通的CDocument, 不知道有影响没有
shen_wei 2009-09-24
  • 打赏
  • 举报
回复
怀疑是你的 刷新的问题
updatevalue()
muzizongheng 2009-09-24
  • 打赏
  • 举报
回复
看看你的桌面设置, 你先把主题方面的设置为 window自动提供最佳性能和效果。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧