cocoa – 响应右键单击的NSButton子类

cocoa – 响应右键单击的NSButton子类,第1张

概述我有一个NSButton子类,我想用鼠标右键单击来完成工作.只是重载-rightMouseDown:不会削减它,因为我想要与常规点击相同的行为(例如按下按钮,用户可以通过离开按钮取消,当鼠标被释放时发送动作等). 我到目前为止所尝试的是重载-rightMouse {Down,Up,Dragged},更改事件以指示鼠标左键单击,然后将其发送到-mouse {Down,Up,Dragged}.现在这显 我有一个NSbutton子类,我想用鼠标右键单击来完成工作.只是重载-rightmouseDown:不会削减它,因为我想要与常规点击相同的行为(例如按下按钮,用户可以通过离开按钮取消,当鼠标被释放时发送动作等).

我到目前为止所尝试的是重载-rightmouse {Down,Up,Dragged},更改事件以指示鼠标左键单击,然后将其发送到-mouse {Down,Dragged}.现在这显然是一个Hack充其量,因为事实证明Mac OS X并不喜欢这一切.我可以单击按钮,但在释放时,按钮仍然被按下.

我自己可以模仿这种行为,这不应该太复杂.但是,我不知道如何按下按钮.

在你说“不要!这是一个非常规的Mac OS X行为并应该避免”之前:我已经考虑过这一点,右键点击可以极大地改善工作流程.基本上按钮循环通过4个状态,我想要右键单击以使其反向循环.这不是一个必不可少的功能,但它会很好.如果你仍然想说“不要!”,那就让我知道你的想法吧.我很感激!

谢谢!

编辑:这是我尝试更改事件(你不能改变类型,所以我做了一个新的,复制所有信息.我的意思是,我知道这是框架明确告诉我不要这样做,但我像你一样去试了一下):

// I've contracted all three for brevity- (voID)rightmouse{Down,Dragging}:(NSEvent *)theEvent {    NSEvent *event = [NSEvent mouseEventWithType:NSleftMouse{Down,Dragging} location:[theEvent locationInWindow] modifIErFlags:[theEvent modifIErFlags] timestamp:[theEvent timestamp] windowNumber:[theEvent windowNumber] context:[theEvent context] eventNumber:[theEvent eventNumber] clickCount:[theEvent clickCount] pressure:[theEvent pressure]];    [self mouse{Down,Dragging}:event]; }

更新:我注意到-mouseUp:从未发送到NSbutton,如果我将其更改为NSControl,它就是.我不知道为什么会这样,直到Francis McGrew指出它包含自己的事件处理循环.现在,这也解释了为什么在我重新路由-rightmouseDown:之前,但按钮不会在发布时上升.这是因为它本身正在获取新事件,我无法拦截并从右向左转换为鼠标按钮事件.

解决方法 NSbutton正在进入鼠标跟踪循环.要更改此项,您必须继承NSbutton并创建自己的自定义跟踪循环.试试这段代码:

- (voID) rightmouseDown:(NSEvent *)theEvent {    NSEvent *newEvent = theEvent;    BOol mouseInBounds = NO;    while (YES)         {            mouseInBounds = NSPointInRect([newEvent locationInWindow],[self convertRect:[self frame] fromVIEw:nil]);            [self highlight:mouseInBounds];            newEvent = [[self window] nextEventMatchingMask:NSRightmouseDraggedMask | NSRightmouseUpMask];            if (NSRightmouseUp == [newEvent type])            {                break;            }        }    if (mouseInBounds) [self performClick:nil];}

我就是这样做的;希望它对你有用.

总结

以上是内存溢出为你收集整理的cocoa – 响应右键单击的NSButton子类全部内容,希望文章能够帮你解决cocoa – 响应右键单击的NSButton子类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1006000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存