hur.cn - 华软网

 热门搜索

关于界面的重绘

  作者:未知    来源:网络    更新时间:2011/8/11
刚学到界面的绘制,碰到这么个问题。 有这样一个基于对话框类的工程  我从4个串口中接受到数据。想将每个数据每隔断时间显示在界面中。 
1 我将显示数据的函数写在串口接收中
LONG CCj_TarckDlg::OnComm(WPARAM ch, LPARAM port)
{

  // if(port==1)    
    m_rxdate[m_prxdate++]=ch;
 
     if(m_prxdate==7)

 {
     m_recivedate=m_rxdate[3]*256+m_rxdate[4];
     CString  str;
              str.Format("温度值是%0.1f",m_recivedate/10.0);
      CDC* pDC=GetDC();
pDC->TextOut(100,100,str);
CDialog::OnPaint();

 }   
return 0;
}


出现问题,有时候刷新的数据会覆盖在前个数据上,只有当我拖动窗体是,才能正常显示


2。在网上查了下资料,我将函数 
 CString  str;
              str.Format("1号通道温度值是%0.1f",m_recivedate/10.0);
      CDC* pDC=GetDC();
pDC->TextOut(100,100,str);
CDialog::OnPaint(); 写在OnPaint中。
在接收函数中调用this->Invalidate()来刷新客户区,好象不行。

能否帮我看下解决方法或者讲下OnPaint这方面的内容,谢谢!





---华软 网友回答---
GetDC画了就画了,一旦重绘,系统会回到wm_paint里的beginpaint,getdc画出来的彻底记不住。
可以在需要时getdc画,
1:该擦除的要擦除。
2:内存里要记下来,重画时要怎么画。
3:onpaint里要知道怎么处理记下来的东西。
---华软网友回复---
你好,问下,由于是网上查资料自学的,怕有的理解错误。

我在函数中调用this->Invalidate()的话,是否是判断客户区无效,系统发送WM_PAINT消息

OnPaint()进行消息响应这个过程吗?
---华软网友回复---
Invalidate不会导致wm_paint的发送。UpdateWindow会。
mfc会把wm_paint映射到OnPaint。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。