0

我正在创建我的第一个应用程序,并且我有一个由视图和窗口的多个子类组成的窗口。我有一个 NSWindowController 类、一个 NSWindow 子类和三个 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];
}

.....

主窗口控制器

#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];
    }
}

.....

然后我只有三个 NSView 类和一个 NSWindow 子类来制作一个带有颜色的圆形矩形窗口。我应该修改/添加什么/在哪里获得我想要的结果?

我也尝试添加 [window setAcceptsMouseMovedEvents:YES] 但仍然没有工作。

提前致谢!

4

1 回答 1

0

-mouseExited: 和 -mouseEntered: 方法应该放在 NSView 子类中。在视图中使用 NSTrackingArea(s) 来通知鼠标进入、移动和退出事件。有关详细信息,请参阅NSTrackingArea 文档

于 2012-04-04T22:52:42.077 回答