【问题标题】:NSPanel not receiving mousedragged eventNSPanel 未收到鼠标拖动事件
【发布时间】:2013-03-25 18:03:58
【问题描述】:

我有一个无边框的 NSPanel,当我第一次启动它并且它有焦点时,我可以拖动它并且正确触发 mousedragged 方法,但是当我将焦点切换到另一个应用程序然后返回到 NSPanel(设置为一个 NSNonactivatingPanelMask) 我不再收到鼠标拖动事件。

我仍然收到 mouseup 和 mousedown 事件,所以我不知道为什么不执行 mousedragged 事件。

有什么想法吗?

这是它的初始化方式:

   _panel  = [[MyPanel alloc] initWithContentRect:frame
              styleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask
              backing:NSBackingStoreBuffered
              defer:NO];

我也尝试将所有这些方法添加到我的面板类中:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

- (BOOL)canBecomeMainWindow
{
    return YES;
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (BOOL)acceptsFirstResponder
{
    return YES;
}

- (BOOL)acceptsFirstMouse
{
    return YES;
}

并使其成为鼠标按下时的第一响应者(它仍然接收):

- (void)mouseDown:(NSEvent *)theEvent
{
    [self makeFirstResponder:self];
    [self makeKeyWindow];
    [self setBackgroundColor:[NSColor redColor]];
    [self display];
}

mousedragged 只包含以下内容:

- (void)mouseDragged:(NSEvent *)theEvent
{
    [self setBackgroundColor:[NSColor greenColor]];
    [self display];
    NSLog(@"dragged");
}

我不希望窗口获得焦点。 (重点应放在下面的第三方应用上)。

更新:我添加了一个示例项目,在此处下载:http://users.telenet.be/prullen/MovingPanel.zip

如您所见,当您第一次运行应用程序时,拖动它会在console.log 中连续输出“dragged”(背景颜色为绿色)。如果您随后切换到另一个应用程序,然后返回到移动面板应用程序,则拖动将不再输出任何内容。 (并且背景颜色将是红色,这是在 mousedown 事件处理程序中设置的)。

如果没有 NSNonactivatingPanelMask,它可以正常工作,但我的面板下方的窗口保持活动状态至关重要。如果有其他方法可以做到这一点,请分享。

我还注意到一件事,如果你双击面板(快速),然后拖动,它会变成绿色(所以 mousedragged: 正在被调用),但它没有移动......不知道该怎么想其中。

【问题讨论】:

    标签: objective-c xcode cocoa draggable nswindow


    【解决方案1】:

    我还注意到,如果我这样做 [self setMovableByWindowBackground:NO];那么它也将正常工作。我敢打赌 setMovableByWindowBackground 的工作方式会干扰被调用的 mouseDragged。这可能是一个错误,它被调用了。

    我猜一种可能的解决方案是实现您自己的窗口拖动。

    如果您真正感兴趣的是在窗口移动时做出响应,那么这个问答可能会提供您所需要的。

    How to receive notifications when moving Window by mouse?

    【讨论】:

    • 谢谢,这正是问题所在!
    猜你喜欢
    • 2019-06-18
    • 2023-03-31
    • 1970-01-01
    • 2012-05-13
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多