0

我是一个 .Net 开发人员,需要将一个小程序移植到 Mac OS X。我已经完成了大部分工作(部分感谢这个网站上的人,谢谢!)但是有一个错误,也许我可以得到帮助的人。

我正在创建一个位于状态栏中的工具,单击该工具会打开一个带有多个链接或按钮的窗口。单击链接或按钮时,它们会打开网站或外部程序。问题是当我启动这些外部命令之一时状态栏中的图标消失了。更有趣的是,状态栏上应该有图标的空间仍然响应;这意味着如果我单击该区域(即使没有可见图标),它仍然会运行代码并打开窗口。

这是当前代码:

托盘.m

#import "tray.h"
#import "MyView.h"

@implementation Tray
-(void) awakeFromNib{
    NSBundle *bundle = [NSBundle mainBundle];
    statusItem = [[NSImage alloc] initWithContentsofFile:[bundle pathForResource:"@icon" ofType:@"png"]];
    MyView *view = [MyView new];
    [statusItem setImage:statusImage];
    view.image = statusImage;
    [statusitem setView:view];
    [statusitem setToolTip:@"Tray App"];
    [view setTarget:self];
    [view setAction:@selector(openWindow)];
}

-(IBAction)openWindow:(id)sender{
    [trayWin makeKeyAndOrderFront:nil];
}

-(IBAction)openActMon:(id)sender {
    (void)system("open '\/Applications/Utilities/Activity Monitor.app'");
}

托盘.h

#import "MyView.h"

@interface Tray : NSObject {
    NSStatusItem *statusItem;
    NSImage *statusImage;

    IBOutlet NSWindow * trayWin;
    IBOutlet NSButton *ActMon;

    void *openWindow;
}

@property (retain,nonatomic) NSStatusItem *statusItem;
-(IBAction)ActMon:(id)sender;
@end

我的视图.h

@interface MyView : NSControl {
    NSImage *image;
    id target;
    SEL action;
}
@property (retain)NSImage *image;
@property (assign) id target;
@property (assign) SEL action;
@end

我的视图.m

#import "MyView.h"
@implementation MyView;
@synthethize image, target, action;
-(void)mousemouseUP:(NSEvent *)event{
    [NSApp sendAction:selfself.action to:self.target from:self];
}
-(void)dealloc {
    self.image = nil;
    [super dealloc];
}
-(void)drawRect:(NSRect)rect {
    [self.image drawInRect:CGRectMake(0,0,18,18) fromRect:NSZeroRect operation:NSCompositeSourceOver];
}
@end
}

单击图像/按钮时会运行 openActMon,图像位于单击图标时打开的托盘Win 窗口中。至此,活动监视器成功启动,但状态栏中的图标消失了。

我曾尝试在 openActMon 中放置一个 [super setNeedsDisplay:YES],但这并没有帮助。我在 openActMon 中添加了 [view setNeedsDisplay:YES] 并且它响应未声明。

我已经给出了所有这些代码,因为正如我所说,我不是 Objective-C 编码器,而是.Net,只需要移植一些小的东西。希望这对将来的其他人有所帮助。其中很多是我从不同的论坛和网站上拼凑起来的,或者从 StackOverflow 上的一些帮助中得到了帮助。我希望有人可以提供帮助。

提前致谢!

4

2 回答 2

2

补充awakeFromNib

[statusitem retain];
于 2011-10-06T23:23:34.217 回答
0

在 awakeFromNib 中,您将 NSImage 分配到 statusItem。我认为您的意思是将其分配到 statusImage 中。

于 2011-01-04T22:28:49.860 回答