【发布时间】:2019-10-03 06:18:35
【问题描述】:
我制作了一个移动无边框 SDL 窗口的函数。我使用SDL_MOUSEBUTTONDOWN 来“激活”窗口移动,使用SDL_MOUSEBUTTONUP 来“停用”它。出于某种原因,它不仅按应有的方式移动,而且移动速度比我的鼠标慢得多,如果我将它移动了很远的距离,它还会闪烁。
我使用 SDL2,并且我在 Windows 10 上。
我的循环总是更新我的鼠标位置,该函数将鼠标位置减少到最后一个鼠标位置,然后将窗口移动该距离。
sPos moveClock(int event){
sPos temPos = setPos(0,0);
if(tempMoveVar==1){
temPos = setPos(gvMousePos.x-mPos.x,gvMousePos.y-mPos.y);
mPos = setPos(gvMousePos.x,gvMousePos.y);
}else if(event==-1){ //Mouse Down
mPos = setPos(gvMousePos.x,gvMousePos.y);
tempMoveVar=1;
}
if(event==-65){ //Mouse Up
tempMoveVar=0;
}
return temPos;
}
我只想在我的鼠标按钮按下时“用”鼠标移动窗口,就像您通常可以移动窗口一样。
【问题讨论】:
-
考虑使用
SDL_SetWindowHitTest而不是手动移动窗口。此外,我会使用命名常量而不是事件 ID 的硬编码值。 -
我找不到很多关于
SDL_SetWindowHitTest的信息,但这听起来正是我正在寻找的东西,但我不知道如何使用它。SDL_HitTest callback应该放什么,void* callback_data应该放什么 - 你能帮我理解吗?或者你能提供一些教程吗? :) -
好的,我会写一个完整的答案。