SDL 在 MFC 框架下的鼠标样式设置失效

今天,用了一下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)再去设置鼠标样式就解决了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值