原来是在对话框上有个控件,SetTimer后,在OnTimer的频率下,控制变化不同位置,
现在有触发事件(按键),想不同的按键刷不同的背景颜色,然后在一秒以后恢复到原来的颜色我是用         CBrush lkwbrush(RGB(0,255,0));
CClientDC dc(this);
CRect rcWnd;
GetClientRect(rcWnd);
dc.FillRect(rcWnd,&lkwbrush);

        Sleep(1000);        RedrawWindow();
来改变背景的颜色,但是有个问题,不知道为什么这样刷背景色会把控件也覆盖了...
应该如何解决把控件覆盖的问题?
第二个难点是:
        是打算在一秒之后重画一次窗口,会把颜色恢复到原样,
        不知道是做法不应该这样,
        还是被OnTimer里的控件MoveWindow函数变化了位置把窗口重刷了,
        背景色只是闪了一下就消失了程序应该怎么改?
谢谢解答!!

解决方案 »

  1.   

    应该Invalidate让系统擦除背景,然后在OnCtlColor返回背景画刷。这样就不会覆盖子控件了
      

  2.   

    如果是更改对话框的背景颜色,应该在CWnd::OnEraseBkgnd事件里
      

  3.   

    应该用时钟消息不应该Sleep
    然后应该在OnPaint中处理不应该直接画
      

  4.   

    定义一个全局变量保存画刷颜色,在OnPaint中绘制背景色。
    在OnTimer中通过时间控制来改变会局变量中的颜色。