为了方便的更改字体和颜色,我在codeguru上下载了一个Clabel类,他继承于Clabel同时我要用它作为时钟显示,于是编写如下代码:
void CSAEDVSDlg::OnTimer(UINT nIDEvent)
{
CTime now = CTime::GetCurrentTime();
//在没有用到Clabel时,下面可以,不出现抖动和未刷新,如果用Clabel类,这不能刷新,最终数字黑成一团
//SetDlgItemText(IDC_CLOCK, now.Format("%Y - %m - %d %I : %M : %S %p"));//mc_clock是Clabel的实例
mc_clock.SetText(now.Format("%Y - %m - %d %I : %M : %S %p"));
// UpdateWindow();
Clabel p=(Clabel*)this->GetDlgItem(IDC_CLOCK);// p->Invalidate();//不能刷新
// p->UpdateWindow();// CRect rec;
if(::IsWindow(p->m_hWnd))
{
p->GetWindowRect(&rec);
}
//以下代码都可以实现刷新,但是整个对话框的其他控件也在刷新,感觉抖动,效果不好
p->InvalidateRect(&rec);
this->InvalidateRect(&rec);
this->Invalidate();
CDialog::OnTimer(nIDEvent);
}
请问:有什么方法可以实现控件的刷新,但又可以防止出现抖动的效果吗?????(由于老的帐号丢失,新帐号没分了,非常抱歉)
void CSAEDVSDlg::OnTimer(UINT nIDEvent)
{
CTime now = CTime::GetCurrentTime();
//在没有用到Clabel时,下面可以,不出现抖动和未刷新,如果用Clabel类,这不能刷新,最终数字黑成一团
//SetDlgItemText(IDC_CLOCK, now.Format("%Y - %m - %d %I : %M : %S %p"));//mc_clock是Clabel的实例
mc_clock.SetText(now.Format("%Y - %m - %d %I : %M : %S %p"));
// UpdateWindow();
Clabel p=(Clabel*)this->GetDlgItem(IDC_CLOCK);// p->Invalidate();//不能刷新
// p->UpdateWindow();// CRect rec;
if(::IsWindow(p->m_hWnd))
{
p->GetWindowRect(&rec);
}
//以下代码都可以实现刷新,但是整个对话框的其他控件也在刷新,感觉抖动,效果不好
p->InvalidateRect(&rec);
this->InvalidateRect(&rec);
this->Invalidate();
CDialog::OnTimer(nIDEvent);
}
请问:有什么方法可以实现控件的刷新,但又可以防止出现抖动的效果吗?????(由于老的帐号丢失,新帐号没分了,非常抱歉)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货