2

Uberlayerというアプリを作りました。ユーザーは、この単一目的の Mac アプリを使用して、他のアプリケーションの上に画像を重ねることができます。

setMovableByWindowBackgroundウィンドウ全体を背景でドラッグできるようにするために使用しています。

アプリケーションがメニューバーよりも上にウィンドウをドラッグできないようになったため、私がやりたいと思っている少しの改善があります。通常のウィンドウでは、メニューバーにロックするのは良いことだと想像できますが、この使用例では、上にドラッグできるのは良いことです。

このデフォルトのウィンドウの動作を変更する方法を知っている人はいますか?

4

2 に答える 2

3

代わりに、次のような-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];
    }
}

** ウィンドウのタイトル バーを非表示にすることを忘れないでください (ウィンドウを選択->属性インスペクターに移動 ->タイトル バーのチェックを外す)。または、他の解決策は、ボーダーレス ウィンドウを作成することです。

于 2012-09-23T20:09:23.007 に答える
0

ジャスティンの回答に追加するだけです。-mouseDown:Justin のコードを使用している間は、そのレベルを設定する必要があります。

[window setLevel:NSMainMenuWindowLevel];

ウィンドウのレベルが より低い場合、NSMainMenuWindowLevel機能しません。NSStatusWindowLevelステータスバーの上にウィンドウが必要な場合は、に設定できます。

于 2016-03-04T09:05:28.863 に答える