我建立一个对话框程序,在里面左边加了一个子窗口CWnd,右边放了几个操作按钮。
我想在在子窗口B中显示背景图片且不想闪烁,所以B的OnEraseBkGround中画背景图后return TRUE,B的OnPaint中画我要的前景,但发现它还是先刷了背景色再画背景图的,明明return TRUE了。
后来我想是不是父窗口A先在它整个客户区刷了背景后再让子窗口B绘图的,于是我在A中也加了OnEraseBkGround什么也不做就return TRUE,这下子窗口的背景图不闪了。但是父窗口A右边那些放操作按钮的区域就也没刷新了。
请问:
1,有什么办法让父窗口只刷新右边放按钮的区域而不刷左边子窗口的区域吗?
2,我尝试了让父窗口A的OnEraseBkGround返回TRUE(不刷),让子窗口B的OnEraseBkGround返回FALSE(刷),结果子窗口的背景也不会刷了,为什么呢?按道理子窗口不是应该要刷新背景的吗?我没多少分,还望大家帮忙,tks。

解决方案 »

  1.   

    A中的照样刷背景,只是在B的OnEraseBkGround什么都不干,直接return TRUE;
      

  2.   

    刷新父窗口的时候,对传进来的那个CDC*进行SelectClipRgn函数调用,即设置一个裁减区域,当然,这个区域你自己去生成,非常容易,就是父窗口这个矩形减去子窗口这个矩形即可。
      

  3.   

    WS_CLIPCHILDREN 
    Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.
      

  4.   

    啊!
    yang79tao 和 Mackz 两位朋友,很对不起啊,填了分数后,我觉得第二个问题没解决就点了无满意结贴,系统竟然不给分了,我不知道会这样哦。
    再次向二位道歉!