在用ActiveX控件绘图时,我想为一幅位图加上一个以1Hz频率闪动的黄色矩形边框。为控件添加了Oncreate和Ontimer函数,在oncreate里面设置了定时器settimer(1,1000,NULL),在Ontimer中添加了如下代码:
void CRunPlanInfoCtrl::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDC* pDC=GetDC();
pDC->SetBkMode(TRANSPARENT);
if (m_D6InfoCtrl==11||m_D6InfoCtrl==13||m_D6InfoCtrl==14)
{
CPen newpen(PS_SOLID,1,RGB(223,223,0)); // 定义黄色画笔
CPen* oldpen=pDC->SelectObject(&newpen);
// 绘制矩形
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->SelectObject(oldpen);
}
CPen newpen1(PS_SOLID,1,RGB(3,17,34)); // 选择背景色画笔颜色,使黄色矩形边框消失
CPen* oldpen1=pDC->SelectObject(&newpen1); pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6); pDC->SelectObject(oldpen1);
COleControl::OnTimer(nIDEvent);
}
我这样做了之后貌似并没有出现边框的闪烁,如果用Invalidate()的话会使得整个控件闪烁,大家又啥好的解决办法吗?求助
void CRunPlanInfoCtrl::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDC* pDC=GetDC();
pDC->SetBkMode(TRANSPARENT);
if (m_D6InfoCtrl==11||m_D6InfoCtrl==13||m_D6InfoCtrl==14)
{
CPen newpen(PS_SOLID,1,RGB(223,223,0)); // 定义黄色画笔
CPen* oldpen=pDC->SelectObject(&newpen);
// 绘制矩形
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->SelectObject(oldpen);
}
CPen newpen1(PS_SOLID,1,RGB(3,17,34)); // 选择背景色画笔颜色,使黄色矩形边框消失
CPen* oldpen1=pDC->SelectObject(&newpen1); pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6);
pDC->LineTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_D6Length-m_ptOrigin.x-m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->MoveTo(m_ptOrigin.x+m_smallchange2/6,m_D6Length-m_ptOrigin.y-m_smallchange2/6);
pDC->LineTo(m_ptOrigin.x+m_smallchange2/6,m_ptOrigin.y+m_smallchange2/6); pDC->SelectObject(oldpen1);
COleControl::OnTimer(nIDEvent);
}
我这样做了之后貌似并没有出现边框的闪烁,如果用Invalidate()的话会使得整个控件闪烁,大家又啥好的解决办法吗?求助
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货