我自绘了一个静态框,(基于 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,也不会闪烁了,但整合功能代码可能会造成不必要的麻烦.
求教解决方法??在线等,这问题已发三帖了,求指点,
求教解决方法??在线等,这问题已发三帖了,求指点,
给对话框加上"WS_CilpChildren"属性(刷新子窗口),给staticex加上"WS_CLIPSIBLINGS"属性(刷新平行窗口),然后staticex,listex都要响应WM_PAINT消息(自绘控件都应该完成OnPaint函数),这样应该就可以了。
No
自绘的LIST?你的LIST是继承自LISTBOX?
LISTBOX的自绘还是不复杂的,写好了DrawItem,另外其他有需要改变外观的事件处理中调用一下RedrawWindow(),不需要什么很复杂的东西。
否则你要重绘 listex 的OnPaint了,不值得。