透明绘图的另类问题。高手请来。不是普通的透明绘图能解决的

Yao-debo 2006-05-03 01:19:10
我使用了MEMDC(我改过了)。我设置了一个定时器。我想实现透明绘图到控件上。但我我不想在控件上显示除我要的图形外的任何其他背景。。。。。。比如我就只要画个圆,而且要在很高刷新状态不闪。
void CClockSta::OnPaint()
{

CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CStatic::OnPaint()

GetClientRect(&m_rect);
CTime time_cuurent;
time_cuurent=CTime::GetCurrentTime();
m_strTime=time_cuurent.Format("%Y 年 %m 月 % 日 %H : %M : %S ");

CMemDC pdc(&dc,m_rect); //默认位图是全黑色的
pdc.SelectObject(this->m_brushBlue);
pdc.SelectObject(this->m_pen);

CRect rect=m_rect;
rect.DeflateRect(1,1);

pdc.RoundRect(rect,CPoint(5,5));
pdc.SetBkMode(TRANSPARENT);
pdc.SetTextColor(m_TXcolor);
pdc.DrawText(m_strTime,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE );//DT_VCENTER|必须和DT_SINGLELINE一起

CMemDC pdc2(&dc,m_rect); //这个是屏蔽图,需要把底色设置为白色
pdc2.FillSolidRect(m_rect,RGB(255,255,255));
pdc2.SetROP2(R2_BLACK);
pdc2.SelectObject(this->m_brushBlue);
pdc2.SelectObject(this->m_pen);

pdc2.RoundRect(rect,CPoint(5,5));
pdc2.SetBkMode(TRANSPARENT);
pdc2.SetTextColor(RGB(0,0,0));
pdc2.DrawText(m_strTime,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE );
pdc2.BitBlt(SRCAND);//执行AND运算
pdc.BitBlt(SRCPAINT);//执行OR运算

}

当我设置SetTimer(1,1,0)的时候,很屏幕很闪。。。
pdc2.BitBlt(SRCAND);//执行AND运算
pdc.BitBlt(SRCPAINT);//执行OR运算
上面两句我随便注释掉一句问题,就不闪了。
...全文
168 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
smzh8 2006-05-03
  • 打赏
  • 举报
回复
会闪烁的问题是你在多次的使用主面DC,你可以为主DC建个mendc,然后在mendc中绘制,然后等一切都画完时,就一次画上主DC.

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧