关于SDL嵌入MFC导致崩溃的最终解决方案

如果做过在MFC下嵌入SDL窗口的应该都知道用SDL_CreateWindowFrom()来代替SDL_CreateWindow(),当然这是SDL2的做法,与SDL1的做法还是有较大差异的。之前有一篇笔记记录了SDL是如何把Window的消息映射到SDL中来的------就是通过SDL_WindowEvent宏定义。因此可能有些人的做法就是将拖动窗口改变大小,移动窗口,鼠标等事件通过sdl的sdl_pollevent()进行轮询,但是这种做法实际上和windows的消息机制冲突了,因此windows和sdl同时监听到WM_RESIZE(mfc的)和SDL_WINDOWEVENT_RESIZED(SDL的)时难免会产生崩溃。从雷神移植的一个mfcplayer工程中得到灵感,直接将sdl的SDL_WINDOWEVENT事件屏蔽掉,这样就可以只通过mfc的消息映射相应窗口大小改变的事件了,本来还担心这样做sdl能不能正常渲染,目前发现实属多虑。最终修改好的程序效果还不错,完美解决了崩溃的问题。

SDL_EventState(SDL_WINDOWEVENT, SDL_IGNORE);  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容