从a色顿时变成b色 必然闪 所谓的闪烁不就是瞬间变色吗,当然也不排除你子窗口瞬间消失出现导致的闪烁想不闪 可以用一些颜色渐变的技术 
#1 可以试试3个子tab页全部不画背景色 而是在承载tab控件的父窗口绘画颜色 根据不同子页改变颜色
#2 不要用hide show来切换显示 而是用movewindow(0,0,0,0)来表示隐藏 还原表示出现

解决方案 »

  1.   

    用内存画布CMemDC来画背景试试
      

  2.   

    movewindow我试了一下,也闪,而且只显示第一页,后面几页都不显示,不知道为什么,反正第一页闪,我就没找原因了。第一种方法能说具体点吗?
      

  3.   

    大家提出一些建议供你参考了 现在问题不是很明朗 你各个页面是不是要求背景色不一样?
    每个页面对应一个dialog类?
    如果子页OnEraseBKngd直接返回true就不画背景色了 你先试试这样闪不闪 如果这样都闪 说明不是画背景导致的
      

  4.   

    我共建了5个子页,背景色是一样的(都是黑色),每个子页对应一个dialog。。我感觉问题是出在切换子页时,隐藏和显示dialog的时候。我刚做了个实验,在切换子页时,为鼠标左键按下(down)和抬起(up)添加消息响应函数,在down函数中添加隐藏dialog代码,在up函数中添加显示dialog代码。结果发现在鼠标按下的时候,背景色会由黑色变回属性控件的原色(浅灰色),在变色的同时,会出现闪烁。在鼠标抬起的时候,背景色会由原色变为我所设置的颜色,但是同样会闪一下。我所说的闪不是指整个dialog子页闪,而是在子页上沿着显示器水平方向上某一条线或某一区域闪一下,不是每次切换子页都会闪。
      

  5.   

    你现在说清楚问题了
    那你给你的tab控件添加一个属性叫做 WS_CLIPCHILDREN
      

  6.   

    这种闪烁是由于你的子窗口和父窗口(tab控件)都试图画背景色导致的 这个属性可以让你的父窗口不画背景 如果你的tab控件是资源里的 可以直接在资源设计器里指定 不然用modifystyle函数也是可以的
      

  7.   

    你的分析很有道理,我回去试一下。最近又遇到一个新问题想跟你请教一下,我在属性页中使用双缓冲绘图,在子页中用定时器定时刷新。当我想关闭程序的时候,系统会提示unhandled exception...0xC0000005...我调试了一下,感觉好像是内存释放的问题,但是没找到具体原因,是不是我在关闭主对话框时应该先把各个子对话框关掉,最后在关闭主对话框呢?
      

  8.   

    不好意识,vc我是属于入门级别的,UI操作时什么意识,我不太明白。是指用户界面操作吗?那些OnCtlColor如何销毁呢?他们在里面都是自动执行的。还有是不是我在销毁主界面的时候先要把定时器全部销毁呢?
      

  9.   

    我在tab控件的资源设计器里没有找到WS_CLIPCHILDREN啊,你说的资源设计器是不是就是对话框或者控件的属性设置窗口啊?主窗口的属性设置窗口的Styles中好像有你所说的WS_CLIPCHILDREN,名字叫Clip children,你的意识是不是把Clip children勾选上就可以了?但是tab控件没有Clip children属性,所我没法勾选。我也试了一下你说的modifystyle,我在绘制tab的时候加了这段代码,不知道加的对不对: m_sheet.ModifyStyle(0,WS_CLIPCHILDREN);运行没有问题,但是效果还是跟以前一样。