我在做一个程序,程序是这样的:一个主界面+一个子对话框(带有几十个按钮)。问题是:当按钮最小化后再点击打开时,那(带有几十个按钮)的子对话框刷新界面时,按钮是一个一个的刷新,很慢,很难看,不知是什么原因。双缓冲,剪辑子窗口也设置,但解决不了。求帮忙
希望:各位能帮我调试一个代码,找出原因来。代码在这:http://yun.baidu.com/share/link?shareid=1682958422&uk=2852477476

解决方案 »

  1.   

    如果界面要是固定的话,可以认为上面是一张图,直接贴图,WM_LBUTTDOWN的时候判断点击的位置,然后执行响应的动作,当然提前把各个按钮的RECT计算好~
      

  2.   

    有另一个思路:就是如果主对话框的Border是Dialog Frame时,不会出现问题,因为最小化还原是跟Border是NONE不一样,真心求解啊
      

  3.   

    带按钮的对话框有没有 WS_CLIPCHILDREN 样式?
    如果没有的话试试加上看看
      

  4.   

    感觉有时加了WS_CLIPCHILDREN,效果反而糟糕了,去掉WS_CLIPCHILDREN试试
      

  5.   

    不关WS_CLIPCHILDREN的事,应该是按钮多了,GdiPlus绘制效率慢导致的
    有子对话框,加上WS_CLIPCHILDREN还是有必要的
      

  6.   

    若有任务管理器在你的界面上不停移动,你会看到你的界面刷新的更厉害
    对于XButton类
    内存dc设为类成员变量
    SetImage的时候以及各种事件响应的时候在内存dc(没创建先创建)上重绘(位图需要改变的时候才绘制)
    Onpaint只干一件事 把memdc bitblt到paintdc反正原则是OnPaint里干的事尽量少
    位图需要改变的时候才重绘 而不是每次刷新就重绘一遍这样处理以后 非按钮点击响应时,一般的窗体刷新 最大化最小化刷新时(只调用OnPaint里的bitblt,而不需要调用具体的绘制)会很快,速度只跟按钮尺寸有关与具体的绘制实现无关(用慢的跟蜗牛的GDI+,跟用很快的GDI,在这时候速度是一样的)。
      

  7.   


    有没有Border不会影响最小化还原吧?Dialog Frame 就是多了个DS_MODALFRAME STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_SYSMENU
      

  8.   


    不关WS_CLIPCHILDREN的事,应该是按钮多了,GdiPlus绘制效率慢导致的
    有子对话框,加上WS_CLIPCHILDREN还是有必要的
    一个界面几十个按钮,这不算多吧.另外根据我上面提的另一个思路“就是如果主对话框的Border是Dialog Frame时,不会出现问题,因为最小化还原是跟Border是NONE不一样”
    我最小化的时候就加上ModifyStyle(0, WS_CAPTION);即加上标题栏,还原的时候就ModifyStyle(WS_CAPTION, 0);这样就解决了,虽然不是好办法。但如果主界面再加多一个窗口,那么窗口切换还是会这样的,但现在我不需要多个窗口先,所以如果还找不到方法就这样先啦(以后要用贴图,不要用按钮个哦)