我做了一个移动无边界SDL窗口的功能。我使用strrchr()
“激活”窗口移动,并使用char *sepptr = strrchr(buffer, '\\');
if (sepptr == NULL) {
sepptr = buffer; // no directory delimiter, replace it completely
} else {
sepptr++; // point to just past the delimiter
}
strcpy(sepptr, "license.lic"); // Overwrite executable name with license name
“禁用”窗口移动。由于某种原因,它不仅会像应该的那样移动,而且会移动得比我的鼠标慢,并且如果我将其移动一段距离,它也会闪烁。
我使用SDL2,并且我在Windows 10上。
我的循环总是更新我的鼠标位置,该功能将鼠标位置减小到最后一个鼠标位置,然后将窗口移动该距离。
SDL_MOUSEBUTTONDOWN
我只希望窗口在按下鼠标按钮时“用”鼠标移动,就像您通常可以移动窗口一样。
答案 0 :(得分:1)
建议不要使用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
,{{1 }},BOTTOMLEFT
)。