void CClock2Dlg::Beeper()
{
for(int i=0;i<10;i++)
{
MessageBeep(MB_ICONASTERISK);
Sleep(1000);
}
}
void CClock2Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 _tsetlocale(LC_ALL,_T( "Chinese-simplified"));   //以下是向对话框刷新时间
CTime t=CTime::GetCurrentTime(); 
CString str1=t.Format(L"%Y年%m月%d日 星期%w");
CString str2=t.Format("%I:%M:%S %p");
  CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));       
lf.lfHeight = 20;
wcscpy_s(lf.lfFaceName, L"宋体");        
font.CreateFontIndirect(&lf);
GetDlgItem(IDC_CURRENTTIME)->SetFont(&font);
GetDlgItem(IDC_CURRENTDATE)->SetFont(&font);
SetDlgItemText(IDC_CURRENTTIME,(LPCTSTR)str2);
SetDlgItemText(IDC_CURRENTDATE,(LPCTSTR)str1);
GetDlgItem(IDC_RINGTIME)->SetFont(&font);
SetDlgItemText(IDC_RINGTIME,(LPCTSTR)RingTime);   //以上是向对话框刷新时间 if(!RingTime.Compare(str2))
{
Beeper();
} CDialog::OnTimer(nIDEvent);
}Beep倒是响了,但是Beep期间对话框不刷新了,怎么回事?

解决方案 »

  1.   

    楼主 有没有调用 SetTimer()函数
    -----
    The SetTimer function creates a timer with the specified time-out value. 
      

  2.   

    Beeper()中有Sleep太多次太长时间,导致对话框不刷新
    应该换别的设计思路
      

  3.   

    SetTimer别的地方有了,不然这么OnTimer。我考虑是不是模态非模态的问题
      

  4.   

    OnTimer是在程序主线程里,在OnTimer函数返回之前主界面是无法刷新的
    另起一个线程,把Beeper放到子线程里
    不要说你不知道怎么起线程哈...
      

  5.   

    解决了,用GetTickCount()完成了,不过还是谢谢大家