【发布时间】:2022-05-04 22:44:45
【问题描述】:
我用 SDL 构建了一个时钟,它是一个没有边框的窗口。 现在我仍然希望能够在我的屏幕上移动我的时钟,所以我写了一个函数来移动它。基本上它等待鼠标按下输入,然后计算移动的距离,直到你释放鼠标。然后它移动窗口。问题是它只能在我的时钟窗口内获取鼠标位置,所以如果我单击左上角然后滑动到时钟窗口的右下角,我只能勉强移动它。
sPos moveClock(int event){
if(event==-1&&mPos.x==0&&mPos.y==0){
mPos = setPos(gvMousePos.x,gvMousePos.y);
cout << "down" << endl;
}
if(event==-65){
mPos = setPos(gvMousePos.x-mPos.x,gvMousePos.y-mPos.y);
cout << "up" << endl;
sPos temPos = mPos;
mPos = setPos(0,0);
return temPos;
}
return setPos(0,0);
}
我希望能够将我的时钟移动到屏幕上的任何位置,因此我需要一种方法来让我的鼠标位置即使在窗外。或者一种在鼠标按下时计算距离的方法,即使我移到 SDL 创建的窗口之外。
【问题讨论】:
-
通过使用为您的操作系统提供的 API 而不是 SDL,您的要求肯定是可能的。 (我们需要知道您使用的是什么操作系统)另外,您是否确定要移动窗口以响应全局鼠标事件?这将产生在用户做其他事情时移动窗口的副作用,例如拖动文件或其他窗口!
-
我想我刚刚回答了我自己的问题,因为我想移动我的窗口,我真的不需要离开我的窗口,我只需要检查鼠标是否在任何方向上移动了 1 个像素并且立即移动我的窗口位置。这样我的鼠标永远不会离开窗口,但窗口会移动。