今天,用了一下SDL的鼠标样式,先是在win32下,初始化窗口之后,
SDL_Cursor* tmp;
tmp = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
SDL_SetCursor(tmp);
SDL_SetCursor(NULL);
运行没有问题,然后我在MFC下,同样的代码,同样的逻辑,发现不成功。
然后跟进到源码中,有这么一段
case WM_MOUSEMOVE:
{
SDL_Mouse *mouse = SDL_GetMouse();
if (!mouse->relative_mode || mouse->relative_mode_warp) {
SDL_MouseID mouseID = (((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) ? SDL_TOUCH_MOUSEID : 0);
SDL_SendMouseMotion(data->window, mouseID, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
}
}
这是SDL本地的消息循环,当鼠标移动的时候,它会去设置鼠标的样式。然后我就每次鼠标进入SDL托管的窗口时,只显示一次我要
设置的样式。那么就明白了,mfc应该也是每次鼠标有什么动作导致鼠标更新的时候会设置鼠标的样式。
所以只要继承 OnSetCursor 这个消息函数,返回true,阻止,本地框架(MFC)再去设置鼠标样式就解决了问题。