我编写了一个仪表盘的控件,先前是让这个控件从背景到上面的指针全部都刷新,但如果多个控件同时运行时CPU的使用率总是很高,现在我想把仪表盘控件背景的刻度和背景色 只在载入时运行,这样CPU的使用率就比较低了。有谁知道该怎么改??我把所有都写在 OnDraw()里面了
OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code with your own drawing code.
CDC m_dcBackground;
COLORREF cMiddle,cEdge,cFont;
CMemDC memDC(pdc, &rcBounds);
CMeter mymeter; // 仪表盘的主函数 cEdge = TranslateColor(GetBackColor());
cFont = GetFontColor();
mymeter.SetCFont(cFont);
mymeter.SetCaption(GetText());
mymeter.SetMinValue(GetMinValue());
mymeter.SetMaxValue(GetMaxValue());
mymeter.SetStartAngle(GetStartAngle());
mymeter.SetEndAngle(GetEndAngle());
mymeter.SetTicks(GetTicks());
mymeter.SetSubTicks(GetSubTicks());
mymeter.SetHighDanger(GetHighDanger());
mymeter.SetLowDanger(GetLowDanger());
mymeter.SetCurrentValue(GetValue());
mymeter.SetScaleColor(GetScaleColor()); if (m_value < m_lowDanger || m_value > m_highDanger && i != 0)
{
cMiddle = RGB(128,0,0);
SetTimer(1,1000,NULL);
i = 0;
}
else
{
i++;
cMiddle = TranslateColor(GetForeColor());
}
mymeter.SetCEdge(cEdge);
mymeter.SetCMiddle(cMiddle); memDC.BitBlt(0, 0, rcBounds.Width(), rcBounds.Height(),
&m_dcBackground, 0, 0, SRCCOPY) ; mymeter.DrawMeterBackground(&memDC, &rcBounds);// 背景刻度
mymeter.DrawValue(&memDC);// 仪表盘 标志,精确刻度
mymeter.DrawNeedle(&memDC);// 仪表盘 指针
mymeter.DrawNode(&memDC); // 仪表盘 中心点}
OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code with your own drawing code.
CDC m_dcBackground;
COLORREF cMiddle,cEdge,cFont;
CMemDC memDC(pdc, &rcBounds);
CMeter mymeter; // 仪表盘的主函数 cEdge = TranslateColor(GetBackColor());
cFont = GetFontColor();
mymeter.SetCFont(cFont);
mymeter.SetCaption(GetText());
mymeter.SetMinValue(GetMinValue());
mymeter.SetMaxValue(GetMaxValue());
mymeter.SetStartAngle(GetStartAngle());
mymeter.SetEndAngle(GetEndAngle());
mymeter.SetTicks(GetTicks());
mymeter.SetSubTicks(GetSubTicks());
mymeter.SetHighDanger(GetHighDanger());
mymeter.SetLowDanger(GetLowDanger());
mymeter.SetCurrentValue(GetValue());
mymeter.SetScaleColor(GetScaleColor()); if (m_value < m_lowDanger || m_value > m_highDanger && i != 0)
{
cMiddle = RGB(128,0,0);
SetTimer(1,1000,NULL);
i = 0;
}
else
{
i++;
cMiddle = TranslateColor(GetForeColor());
}
mymeter.SetCEdge(cEdge);
mymeter.SetCMiddle(cMiddle); memDC.BitBlt(0, 0, rcBounds.Width(), rcBounds.Height(),
&m_dcBackground, 0, 0, SRCCOPY) ; mymeter.DrawMeterBackground(&memDC, &rcBounds);// 背景刻度
mymeter.DrawValue(&memDC);// 仪表盘 标志,精确刻度
mymeter.DrawNeedle(&memDC);// 仪表盘 指针
mymeter.DrawNode(&memDC); // 仪表盘 中心点}
解决方案 »
- 对话框弹出后不响应了
- ie编程 同样的代码解析同样的页面时,有的机器会报拒绝访问?
- 如何让CTreeCTrl里多个Item高亮显示?
- 能否用编程的方式实现设置windows xp防火墙规则的?
- 怎么释放_variant_t中的内存?
- 请问怎样将一个单文档程序转化为基于对话框的程序(保留其中的View和Document)?
- 用什么函数建立目录?
- 请问如果我创建了一个控件,如果拦截这个控件的消息?不要告诉我用Classwizard!!!!
- jdy,谢谢你!
- 新手在做课设,不知道怎么将子窗口的文本编辑框的类容同步到父窗口
- 我的程序用了realplay控件,请问如何捕捉到没有装realplay时程序出现的异常?非常感谢.
- BSTR与CString的转换!!奇怪,差哪呢。
可以试试找到是哪一部分对性能的影响最大, 查查是什么原因吧