我自绘了一个静态框,(基于 cstatic,在onPaint中绘制,记为staticex),自绘了一个列表框(记为listex),现在在一个dialog中创建staticex对象,其区域为rcstatic;再创建一个listex对象,其区域为rcList;两个对象均以Dialog为父窗口,且rcList在rcstatic内(两者重叠),又用setwindowPos保证了listex对象在staticex对象之上,现在列表有多项时,用键盘上的上下箭头滚动,却会出现listex无法刷新的状态,如果用invalidate刷新,又太多闪烁,WS_CLIPSIBLINGS已试过,自己判断问题应该出在LIST我是在DrawItem中重画的,并没有调用onPaint,而在ONPAINT重画就应该不会出现这种问题,当然,我也试过把listex做为staticex的子窗口,这样就不需要invalidate,也不会闪烁了,但整合功能代码可能会造成不必要的麻烦.
求教解决方法??在线等,这问题已发三帖了,求指点,

解决方案 »

  1.   

    这里不是未刷新,而是刷新消息没有被正确处理。
    给对话框加上"WS_CilpChildren"属性(刷新子窗口),给staticex加上"WS_CLIPSIBLINGS"属性(刷新平行窗口),然后staticex,listex都要响应WM_PAINT消息(自绘控件都应该完成OnPaint函数),这样应该就可以了。
      

  2.   


    No
    自绘的LIST?你的LIST是继承自LISTBOX?
    LISTBOX的自绘还是不复杂的,写好了DrawItem,另外其他有需要改变外观的事件处理中调用一下RedrawWindow(),不需要什么很复杂的东西。
      

  3.   

    两者不要重叠。如果listex剧中的话,staticex对象 建4个,在listex4周,否则自己减数量staticex对象。
    否则你要重绘 listex 的OnPaint了,不值得。
      

  4.   

    LISTEX继承于CLISTCTRL,明显不好响应ONPAINT函数,因为自绘是在drawITEM 中完成的,调用onpaint就直接刷没了。