用CTime::GetCurrentTime()可以得到当前时间,并用pDC->TextOut()可以显示出来,但是这样的时钟是静态的,打开一次文档变一次,而不能实时的随秒动态显示,不知道怎么弄,谢谢

解决方案 »

  1.   

    现在一个初始化函数里调用SetTimer,
    再响应WM_TIMER消息,
    在响应函数中调用InvalidateRect(&rect),使你输出时间的矩形区域重绘,
    在重绘函数OnDraw中pDC->TextOut...
      

  2.   

    能不能给几句代码?
      我是在函数OnDraw()中这样做得
    SetTimer(1,1000,NULL);
    CTime t=CTime::GetCurrentTime();
    str=t1.Format();
    pDC->TextOut(x,y,str);
    但是还是不变啊
      

  3.   

    在编程时,会经常使用到定时器。使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。1.1 用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型 UINT_PTR SetTimer(
    HWND hWnd,              // 窗口句柄
    UINT_PTR nIDEvent,      // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
    UINT uElapse,           // 时间间隔,单位为毫秒
    TIMERPROC lpTimerFunc   // 回调函数
    );例如 
    SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
    在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如:UINT SetTimer(1,100,NULL); 
    函数反回值就是第一个参数值1,表示此定时器的ID号。第二个参数表示要等待100毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。
    注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。1.2 调用回调函数此方法首先写一个如下格式的回调函数void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
    然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。二、多个定时器的实现与应用我们在安装定时器时都为其指定了ID,使用多个定时器时,该ID就发挥作用了。
    不使用MFC时,当接收到WM_TIMER消息,WPARAM wParam中的值便是该定时器的ID
    使用MFC时就更简单了,我们为其增加WM_TIME的消息处理函数OnTimer即可,请看如下例子 
    void CTimerTestDlg::OnTimer(UINT nIDEvent) 
    {
    switch (nIDEvent)
    {
    case 24: ///处理ID为24的定时器
       Draw1();
       break;
    case 25: ///处理ID为25的定时器
       Draw2();
       break;
    }
    CDialog::OnTimer(nIDEvent);
    }
    当你用回调函数时,我们可以根据nTimerid的值来判断是哪个定时器,例如: 
    void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
    {
       switch(nTimerid)
       {
       case 1: ///处理ID为1的定时器
             Do1();
             break;
       case 2: ///处理ID为2的定时器
             Do2();
             break;
       }
    }
    三、取消定时器不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下BOOL KillTimer(
    HWND hWnd,          // 窗口句柄
    UINT_PTR uIDEvent   // ID
    );
    在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。