最近项目写一个夸平台的控件,使用了 SDL 管理MFC的视图,渲染的部分是opengl渲染,发现opengl渲染的部分,当 CSplitterWnd 的分隔条滑动的时候,会把opengl渲染的擦掉,露出视图的底图来,然后调试发现,拖动分隔条完毕后,当opengl在view的onpaint里面渲染完了之后,CSplitterWnd 会重绘边框,当边框重画完的时候,同样,opengl渲染的部分也没了,露出了底图。这么分析,应该是opengl渲染的缓存在opengl里面,mfc并没有这部分缓存数据,所以MFC本地的一些特殊重绘,会引发这样的问题。
问题的原因定位了,那么就着手解决。首先自己继承 CSplitterWnd ,然后在OnEraseBkgnd()中,把背景擦除,然后在onpaint()中,调用控件的重绘,这样即可以解决问题。