0

私は最初のアプリケーションを作成しています。ビューとウィンドウの複数のサブクラスで構成されるウィンドウがあります。単一のウィンドウを作成するために、1 つの NSWindowController クラス、1 つの NSWindow サブクラス、および 3 つの NSView サブクラスがあります。マウスイベントを使用する必要があることを除いて、すべてが完全に機能し、完璧に見えますが、どこに置くべきかわかりません。実際、すべてのクラスファイルに入れてみましたが、まだ機能しません..

私がやりたいのは、マウスがウィンドウを出たときに常に上にある既存のウィンドウを透明にすることです (完全に透明ではなく、部分的に透明で、設定方法を知っています)。マウスがウィンドウに入ったとき、またはウィンドウがキー ウィンドウになったとき。

以下は、何が起こっているのかを理解するのに役立つコードの一部です: (変数とクラス名の一部を変更しました)


アプリのデリゲート:

#import "AppDelegate.h"
#import "MainWindowController.h"

@implementation AppDelegate

@synthesize window = _window;

-(IBAction)showMainWindow:(id)sender
{
    mainWindowController = [[MainWindowController alloc] init];
    mainWindow = [mainWindowController window];
    [mainWindow makeKeyAndOrderFront:sender];
    [NSApp activateIgnoringOtherApps:YES];
}

.....

MainWindowController :

#import "MainWindowController.h"

-(id) init {
    self = [super initWithWindowNibName:@"MainWindow"];
    return self;
}

.....

// These don't work
-(void)mouseExited:(NSEvent *)theEvent
{
    if ([self.window level] == NSFloatingWindowLevel && ![self.window isKeyWindow]) {
        [self.window setOpaque:NO];
    }
}

-(void)mouseEntered:(NSEvent *)theEvent
{
    if ([self.window level] == NSFloatingWindowLevel) {
        [self.window setOpaque:YES];
    }
}

.....

そして、3 つの NSView クラスと 1 つの NSWindow サブクラスを使用して、色付きの角丸ウィンドウを作成します。必要な結果を得るには、何を/どこに変更/追加する必要がありますか?

[window setAcceptsMouseMovedEvents:YES] も追加しようとしましたが、それでも機能しませんでした。

前もって感謝します!

4

1 に答える 1

0

-mouseExited: および -mouseEntered: メソッドは、NSView サブクラスに配置する必要があります。ビューで NSTrackingArea を使用して、マウスの入力、移動、および終了イベントの通知を受け取ります。詳細については、NSTrackingArea のドキュメントを参照してください。

于 2012-04-04T22:52:42.077 に答える