用于移动SDL2窗口的功能,而鼠标按下时会闪烁该窗口,并且移动速度不够快
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于移动SDL2窗口的功能,而鼠标按下时会闪烁该窗口,并且移动速度不够快相关的知识,希望对你有一定的参考价值。
我做了一个移动无边界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
:
SDL_SetWindowHitTest
此功能可让您指定拖动窗口的特定像素所执行的操作(可能的动作是移动窗口,调整窗口大小或不执行任何操作。
创建窗口后,您可能应该调用一次此函数。
参数为:
[
int SDL_SetWindowHitTest(SDL_Window* window, SDL_HitTest callback, void* callback_data);
代表一切。[
SDL_Window* window
接收一个函数,当给定像素坐标时,确定拖动该像素的操作。[
SDL_HitTest callback
描述如下。
您需要编写一个函数传递给void* callback_data
。它必须具有以下返回类型和参数类型:
callback
SDL_HitTestResult MyCallback(SDL_Window* win, const SDL_Point* area, void* data)
{
...
}
和area->x
是要检查的像素的坐标。 area->y
是窗口。
win
将收到与调用data
时传递给callback_data
的指针相同的指针。您可以使用此指针将任意数据传递给回调。或者,如果不需要,只需将其设置为SDL_SetWindowHitTest
。
您的回调应返回以下之一:
- [
0
-无操作。 - [
SDL_HITTEST_NORMAL
-拖动此像素将移动窗口。 SDL_HITTEST_DRAGGABLE
-拖动此像素可调整窗口的特定边缘(或多个边缘)的大小。 (这里SDL_HITTEST_RESIZE_*
是以下之一:*
,TOPLEFT
,TOP
,TOPRIGHT
,RIGHT
,BOTTOMRIGHT
,BOTTOM
,BOTTOMLEFT
。)>
以上是关于用于移动SDL2窗口的功能,而鼠标按下时会闪烁该窗口,并且移动速度不够快的主要内容,如果未能解决你的问题,请参考以下文章
为啥鼠标右键单击在按下时会触发“pointerdown”事件,但在释放时不会触发“pointerup”事件?