用mfc写一个控件, 里面有个CMyDialog继承了CDialog, CMyDialog里设了一个定时器,每隔2秒刷新对话框。 主要代码如下:
CDialogCtrl ---- 控件类
CMyDialog ---- 自己的对话框类
CMyDailg : public CDialog
{
OnPaint() ----- 画屏幕
OnTimer() ----- 每隔2秒去掉OnPaint,以刷新屏幕
......
}
CDialogCtrl : public COleControl
{
CMyDialog m_myDlg;
......
}CDialgoCtrl::OnCreate()
{
m_myDlg.Create()
....
}CDialgoCtrl::OnDraw()
{
m_myDlg.MoveWindow(rcBounds, TRUE);
.......
}
现有两个问题
1, 该控件的CPU占有率是在太高, 98%左右
2, 该控件没有实现每隔2秒刷新控件界面的功能。请各位看看,肯定会多多给分的。
CDialogCtrl ---- 控件类
CMyDialog ---- 自己的对话框类
CMyDailg : public CDialog
{
OnPaint() ----- 画屏幕
OnTimer() ----- 每隔2秒去掉OnPaint,以刷新屏幕
......
}
CDialogCtrl : public COleControl
{
CMyDialog m_myDlg;
......
}CDialgoCtrl::OnCreate()
{
m_myDlg.Create()
....
}CDialgoCtrl::OnDraw()
{
m_myDlg.MoveWindow(rcBounds, TRUE);
.......
}
现有两个问题
1, 该控件的CPU占有率是在太高, 98%左右
2, 该控件没有实现每隔2秒刷新控件界面的功能。请各位看看,肯定会多多给分的。
WM_TIMER的优先级又低,改成m_myDlg.MoveWindow(rcBounds, FALSE);trytry
m_myDialog.Invalidate();
而rcBounds改在WM_SIZE的响应中处理,这应该能减少一些。
还想减少的话,我认为可能是其它地方的代码,需要源码
现在把m_myDlg.MoveWindow改成了m_myDlg.ShowWindow(SW_SHOW), CPU占有率是下来了, 可是外观不更新。
我现在的做法是
CDialgoCtrl中有一个接口函数, ChangeColor();
void CDialgCtrl::ChangeColor()
{
m_myDialog.StartChange();
}在CMyDailg中
void CMyDailg::StartChange()
{
SetTimer(1, 1000, NULL);
}void CMyDailg::OnTimer()
{
........//修改背景
OnPaint();
}
这样, 导致了上述问题
现在得问题是字在滚屏的时候, 没有把上次的位置刷新, 使得控件上都是字。
请问,Zeroxy什么好的建议, 或例子
在Dialog的OnTimer里面改变m_pos的值,然后让ActiveX Invalidate
在ActiveX的OnDraw里面按照新的m_pos重新绘制文字。