在对话框中设置了一个视图,想要在视图中的某一坐标点比如(115,20)
这个点处显示系统时间,与系统时钟同步的连续显示
而我现在实现了系统时间的显示,但是只能取一次,不能动态的连续显示
我在OnDraw(CDC *pDC)里现实的:
void CMyView::OnDraw(CDC *pDC)
{
  CTime t=CTime::GetCurrentTime();//得到系统当前时间
CString s;
s=t.Format("%H:%M");
pDC->TextOut(115,20,s);//在该点显示
}
怎么样才能够连续的显示呢?
请高手帮忙指导

解决方案 »

  1.   

    SetTimer(nIDEvent, 1000); 最好在OnInitialUpdate() 中设置吧响应WM_TIMER消息,在OnTimer(UINT nIDEvent)中根据nIDEvent刷新
    Invalidate(FALSE);或者InvalidateRect(rectDraw);  这两个不知哪个好用点,自己试试吧...
      

  2.   

    设置定时器,刷新:Invalidate,但是会闪,应用双缓冲技术。
      

  3.   

    1楼说得对,不过我一般习惯用UpdateData(FALSE);
      

  4.   

    因为你要更新的时间区域非常小,可以直接在定时器函数里对DC进行操作
    这样就不会闪烁了
    CClientDC dc(this);
    CTime t = CTime::GetCurrentTime();
    dc.TextOut(115,20,t.Format("%H:%M"));
      

  5.   

    已经可以实现连续的时间获得,
    是用MessageBox()显示的。
    而我用pDC->TextOut()没有显示啊
    这是为什么?
    另外,MessageBox框会在时间改变时闪烁
    如何解决?我的实现:
    void CTtView::OnInitialUpdate() 
    {
    SetTimer(1,1000,NULL);
    CView::OnInitialUpdate();
    }void CTtView::OnTimer(UINT nIDEvent) 
    {

    CString s;
    CTime  t=CTime::GetCurrentTime(); //得到系统时间
    s=t.Format("%H:%M:%S");           //转化为字符串
    MessageBox(s);                    //messageBox抛出察看
            CDC *pDC;
            pDC->TextOut(100,100,s);          //在该点显示
    Invalidate(FALSE);
    CView::OnTimer(nIDEvent);
    }
    但是在我设定的点没有显示
      

  6.   

    Invalidate(FALSE); //不要这句,或都显示时间放到OnDraw()