在鼠标按下时移动 SDL2 窗口的功能闪烁窗口并且移动速度不够快
Function to move a SDL2 window while mouse down flickers the window and doesn't move 'fast' enough
我做了一个函数来移动一个无边框的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
:
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
将收到您在调用SDL_SetWindowHitTest
时传递给callback_data
的相同指针。您可以使用此指针将任意数据传递给回调;或者,如果您不需要它,只需将其设置为0
.
您的回调应返回以下内容之一:
SDL_HITTEST_NORMAL
- 无操作。SDL_HITTEST_DRAGGABLE
- 拖动此像素可移动窗口。SDL_HITTEST_RESIZE_*
- 拖动此像素可调整窗口特定边缘的大小。(这里*
是:TOPLEFT
、TOP
、TOPRIGHT
、RIGHT
、BOTTOMRIGHT
、BOTTOM
、BOTTOMLEFT
、LEFT
(。
相关文章:
- 移动窗口库
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 有没有办法像动画一样移动控制台窗口?
- 基于人脸检测坐标的GTK+移动窗口
- X11:移动窗口时获得通知
- 有没有更好的方法来移动窗口
- WM_SIZE和移动窗口
- 移动窗口RMQ性能改进
- 使用第二个线程快速更新 GUI 窗口会通过调整窗口大小或移动窗口而崩溃
- 如何使用QT中的自定义标题栏移动窗口
- 如何在 MFC 中移动窗口
- 移动窗口(),跳过,躲避或绕过消息传递
- 移动窗口 - 设置最小宽度/高度
- 移动窗口时发生堆栈溢出(C++,winapi)
- 移动窗口和调整底部闪烁大小
- 移动窗口超出约束
- X11 XMoveWindow与SDL 1.2不移动窗口
- c - 在 XGrabKeyboard 之后无法移动窗口
- 移动窗口在mfcc++没有标题栏
- 如何用c++用鼠标右键移动窗口