0

画像編集ウィンドウがあります。イベントをドラッグした後、ウィンドウを左下隅のミニチュアに最小化し、ミニチュアにドロップした後、ウィンドウを元に戻します。ミニチュアの上で、カーソルを に変更しますoperationNotAllowedCursor

問題はNSWindow、最初の後にミニチュアのカーソルを変更しないことですdraggingEntered(2番目以降はすべて問題ありません)。さらに、ミニチュア NSWindow にドロップした後、その領域をクリックするまでイベントを受け取りません。

ウィンドウを最小化するコード (NSWindow サブクラス内):

-(void)minimize
{        
    const double miniSize = 240;
    MSDraggingMiniature *mini = [[MSDraggingMiniature alloc] init];
    [mini setMiniImage:[[MSScreenMaker getInstance] makeEditorScreen:(int)[self windowNumber]]];

    _mainContentView = self.contentView;
    _oldFrame = [self frame];
    [self setStyleMask:NSBorderlessWindowMask];
    self.contentView = mini;
    NSRect drect = [[self screen] frame];
    double width, height;
    if (self.frame.size.width < self.frame.size.height) {
        height = miniSize;
        width = self.frame.size.width / self.frame.size.height * miniSize;
    } else {
        width = miniSize;
        height = self.frame.size.height / self.frame.size.width * miniSize;
    }
    _anima = MSEditorResizeAnimationMinimize;
    [self setFrame:NSMakeRect(drect.origin.x + 20, drect.origin.y + 20 , width, height) display:YES animate:YES];
}
-(void)deminimize
{
    self.contentView = _mainContentView;
    [self setStyleMask:NSTitledWindowMask];
    _anima = MSEditorResizeAnimationDeminimize;
    [self setFrame:_oldFrame display:YES animate:YES];

    [self makeKeyWindow];
    [self makeMainWindow];
}
4

1 に答える 1

0

多くのバリエーションの後、私は答えを見つけました。Dragging Source のように動作する area は、私が持っていNSViewた のサブクラスではなく、ちょうど でなければならないようNSButtonです。

Dragging Source クラスを書き直しました - 今ではすべて正常に動作します。

于 2013-01-24T11:44:30.890 に答える