您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> MFC窗口背景刷怎么弄成透明色?

MFC窗口背景刷怎么弄成透明色?

来源:网络整理     时间:2016/7/6 17:26:06     关键词:

关于网友提出的“ MFC窗口背景刷怎么弄成透明色?”问题疑问,本网通过在网上对“ MFC窗口背景刷怎么弄成透明色?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: MFC窗口背景刷怎么弄成透明色?
描述:

窗口在刷新的时候总是先刷白一下再绘图 视觉上就是闪一下 该怎么办啊?
我已经用了
BOOL CTsylqDlg::OnEraseBkgnd(CDC* pDC) 
{
// TODO: Add your message handler code here and/or call default
//return CDialog::OnEraseBkgnd(pDC);
return TRUE;
}
但是没有效果  所以我想在初始化窗口的时候设置窗口背景刷的颜色为透明色 该怎么做呢?
或者有没有其他的方法呢? 
谢谢大家~~~!!!!


解决方案1:

这个肯定是要上双缓冲的 上了双缓冲 在OnEraseBkgnd 中renturn false

解决方案2:

楼主两点要说明: 
   1.OnEraseBkgnd响应从主窗口,到CTsylqDlg,层层都要响应到的。
    2.记得绘制的时候采用双缓冲机制。
这两点是解决你的闪烁的主要方式!

解决方案3:

引用 8 楼 fireway2008 的回复:
估计没办法弄, 那是绘制的机制。
return false;
白屏消失,但是你的绘制是在直接覆盖图像的基础上,
即越抹越黑。

纠正一下,根据MSND的说法,
重载OnEraseBkgnd ,其内返回值有如下定义:
返回1(TRUE) 接受WM_ERASEBKGND的消息,但不会进行背景擦除
返回0(FALSE)接受WM_ERASEBKGND的消息,但  会进行背景擦除并重新绘制背景。

所以,
方案1:你要在OnEraseBkgnd 之外的地方,不擦除背景的情况下用Invalidate(0);
表示区域有效,保证绘制上的位图能完全覆盖上一张作为背景的位图,那样就不会有白屏闪烁的出现,
2.方案2: 即大家所说的双缓冲。

解决方案4:

采用双缓冲机制是正道:
    说白了也就是在内存中画,然后再贴到界面上.您google上搜一下,有许多例子.


以上介绍了“ MFC窗口背景刷怎么弄成透明色?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2344790.html

相关图片

相关文章