我使用了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运算
上面两句我随便注释掉一句问题,就不闪了。
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运算
上面两句我随便注释掉一句问题,就不闪了。
解决方案 »
- 求助:打印activex control的问题。
- ListCtrl怎么没有显示头不,数据显示也不正常
- 请 帮我看看这个个程序,谢谢...
- 让alt+F4不再关掉您的窗口
- 传递字体时出现问题
- 简单问题:怎样在用VC++建立的Win32 Application中使用类?
- 我在程序中用了一个Mscomm串行控件,但是当我安装到另一台机器上时却不能创建这个控件, 在线等待!
- 愿意和大家一起交流学习VC的,不论你水平的高低讲进来留个QQ。大家共同进步!(注:哪些自认为水平很高的保守份子不要进)
- 一段程序看不懂,高手帮忙读一下,好像是关于读进内存池之类的,其中2个结构体的成员变量看不懂应该不影响阅读
- 怎样在C/C++中定义一个函数指针数组,然后怎样使用它??
- 深圳,软件项目负责人一月能有多高薪金(20人左右的项目人员),年收入能有多少?
- 关于时间问题~~!!
从你的代码看,
pdc2.BitBlt(SRCAND);//执行AND运算
pdc.BitBlt(SRCPAINT);//执行OR运算
都是在向显示DC执行BitBlt操作? 如果是这样,由于你两次的时间间隔非常短,故会闪得非常厉害.因此也出现了你随便注释一句便不闪的现象.你是不是可以先将要显示的图形在MEMDC中准备完成后再整体复制到显示DC中?