我做了一個名爲Uberlayer的應用程序。用戶可以使用這個單用途的Mac應用程序在其他應用程序之上疊加圖像。拖動一個NSWindow高於菜單欄
我使用setMovableByWindowBackground
來啓用拖動整個窗口的背景。
我想做一點改進,因爲應用程序現在不能拖動窗口高於菜單欄,這可能有點惱人。在正常的窗口中,我可以想象將它鎖定到Menubar是一件好事,但對於這種用例,將其拖到更高位置會是一件好事。
任何人都知道如何改變這個默認的窗口行爲?
我做了一個名爲Uberlayer的應用程序。用戶可以使用這個單用途的Mac應用程序在其他應用程序之上疊加圖像。拖動一個NSWindow高於菜單欄
我使用setMovableByWindowBackground
來啓用拖動整個窗口的背景。
我想做一點改進,因爲應用程序現在不能拖動窗口高於菜單欄,這可能有點惱人。在正常的窗口中,我可以想象將它鎖定到Menubar是一件好事,但對於這種用例,將其拖到更高位置會是一件好事。
任何人都知道如何改變這個默認的窗口行爲?
而不是使用-setMovableByWindowBackground:
覆蓋-mouseDown:
事件是這樣的:
- (void)mouseDown:(NSEvent *)event
{
NSPoint originalMouseLocation = [window convertBaseToScreen:[event locationInWindow]];
NSRect originalFrame = [window frame];
while (YES)
{
NSEvent *newEvent = [window nextEventMatchingMask:(NSLeftMouseDraggedMask | NSLeftMouseUpMask)];
if ([newEvent type] == NSLeftMouseUp)
{
break;
}
NSPoint newMouseLocation = [window convertBaseToScreen:[newEvent locationInWindow]];
NSPoint delta = NSMakePoint(
newMouseLocation.x - originalMouseLocation.x,
newMouseLocation.y - originalMouseLocation.y);
NSRect newFrame = originalFrame;
newFrame.origin.x += delta.x;
newFrame.origin.y += delta.y;
[window setFrame:newFrame display:YES animate:NO];
}
}
**不要忘了隱藏窗口的標題欄(選擇窗口 - >去屬性督察 - >取消標題欄 ),因爲它的窗戶不能比菜單欄高。或者其他解決方案是創建無邊框窗口。
我只是增加了賈斯汀的答案。您需要在使用Justin的-mouseDown:
代碼時設置其級別。
[window setLevel:NSMainMenuWindowLevel];
如果窗口的水平低於NSMainMenuWindowLevel
它將無法工作。 如果您希望窗口位於狀態欄上方,您可以將其設置爲NSStatusWindowLevel
。
+1爲鼠標下降:方法:) – epologee
謝謝!完美的作品.. – Jankeesvw
@Jankeesvw不客氣,我很高興幫助。 –