windows的标准对话框在尺寸可变时当你拉伸尺寸时所有控件的位置都可以变化,而且关键是它的刷新效果一点不闪,我也做了一个对话框,但拉伸时很闪,所以请高手指点!    或者说也可以有些软件是在拉伸过程中有个虚框,松手后一次性缩放,请问如何知道在对话框拉伸完毕松开鼠标左键的动作?

解决方案 »

  1.   

    别把绘制过程放在Draw里,放在EraseBkgnd里
      

  2.   

    cdialog是没有ondraw的,默认的就是在EraseBkgnd里面,不要听上面的。
    在onsize里面缩放的时候LockWindowUpdate();完了UnlockWindowUpdate();
      

  3.   

    LONG oldStyle = GetWindowLong(this->m_hWnd,GWL_STYLE);
    oldStyle |= WS_CLIPCHILDREN;  //确保有子控件的地方不再重绘背景 ,这两个前后顺序也不要搞错了,会闪烁
    oldStyle |= WS_CLIPSIBLINGS ;
    SetWindowLong(this->m_hWnd,GWL_STYLE,oldStyle);
     
    看看加上这2个属性了吗?很管用的。另外如果不需要重画父窗口的背景,EraseBkgnd里直接返回TRUE/
      

  4.   

    楼上高人“cdpc0202() ”朋友,你的这个属性是在OnInitDialog函数里加呢还是哪里加,“不要搞错了,会闪烁”是什么意思?要用SetWindowLong(this->m_hWnd,GWL_STYLE,oldStyle);分别设两遍吗?
      

  5.   

    EraseBkgnd直接返回TRUE表示需要你自己更新背景,在onpaint里面做,如果要画的东西太多了,这个也是一个基本上来说一定要做的,比如说一个游戏程序。