小编use*_*310的帖子

keyDown没有被调用

我有一个名为SurfaceView的自定义NSView.它是NSWindow的contentView,它处理鼠标点击和绘图等基本事件.但是不管我做什么都没关系,它不处理keyDown函数.我已经覆盖了acceptFirstResponder但没有任何反应.

如果重要,我使用自定义NSEvent循环运行应用程序,如下所示:

NSDictionary* info = [[NSBundle mainBundle] infoDictionary];
NSString* mainNibName = [info objectForKey:@"NSMainNibFile"];

NSApplication* app = [NSApplication sharedApplication];
NSNib* mainNib = [[NSNib alloc] initWithNibNamed:mainNibName bundle:[NSBundle mainBundle]];
[mainNib instantiateNibWithOwner:app topLevelObjects:nil];

[app finishLaunching];

while(true)
{   
    NSEvent* event = [app nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate date] inMode:NSDefaultRunLoopMode dequeue:YES];
    [app sendEvent:event];

    // Some code is execute here every frame to do some tasks...

    usleep(5000);
}
Run Code Online (Sandbox Code Playgroud)

这是SurfaceView代码:

@interface SurfaceView : NSView
{
    Panel* panel;
}

@property (nonatomic) Panel* panel;

- (void)drawRect:(NSRect)dirtyRect;
- (BOOL)isFlipped;
- (void)mouseDown:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent …
Run Code Online (Sandbox Code Playgroud)

keyboard cocoa objective-c keydown nswindow

6
推荐指数
1
解决办法
6395
查看次数

虚拟方法未被调用

我有一个名为Panel的基类,其中存储了一些关于窗口的信息,然后,我有所有控件的子类:Button,Label等.在基类中,我有virtual void ApplySchemeSettings(Scheme* scheme) { }方法,在Panel(Panel* parent)构造函数中调用.但是,不是子类,而是调用ApplySchemeSettings基类(Panel).

class Panel
{
    [...]

public:
    virtual void ApplySchemeSettings(Scheme* scheme) { };

    Panel(Panel* parent)
    {
        [...]

        this->ApplySchemeSettings(scheme());
    };
}

class Frame : public Panel
{
    [...]

public:
    void ApplySchemeSettings(Scheme* scheme)
    {
        this->border = scheme->GetBorder("FrameBorder");
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能声明ApplySchemeSettings为抽象,因为子类是由用户创建的.

c++ virtual inheritance class

5
推荐指数
1
解决办法
844
查看次数

标签 统计

c++ ×1

class ×1

cocoa ×1

inheritance ×1

keyboard ×1

keydown ×1

nswindow ×1

objective-c ×1

virtual ×1