关于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);  

你可能感兴趣的:(关于SDL嵌入MFC导致崩溃的最终解决方案)