实现自定义绘制的 NSMenuItem 视图的直接方法
Straightforward way to implement custom drawn NSMenuItem views
我想要一个包含几个 NSMenuItem
的 NSMenu
。这些项目的行为应与 "normal" NSMenuItem
s 相同,但有一个例外:我希望能够绘制 contents(即 "foreground" ) 我自己的每一项。
即:
我希望操作系统在我用鼠标悬停时绘制蓝色突出显示,绘制复选标记或破折号(表示"selected"/"part of multi-selection")。此外,我想要 "normal",即 menu-built-in mouse/keyboard 行为。
我想画 "contents" 我自己: 理想情况下,我想我必须 implement/override 一张方法drawMenuItem:withCGContext:inRectangle:withTextColor
,它基本上获取项目,要绘制到的CGContext
,项目的NSRect
,以及[=59将使用的文本颜色 =] OS 如果它自己绘制项目。
我知道(强烈怀疑)我的愿望可能太多了,但如果有足够的东西我会非常满意(例如,我可以想象自己从 NSMenuItem
中获取 NSRect
,使用 [NSColor selectedMenuItemTextColor]
之类的方法获取颜色,使用 [NSContext currentContext]
).
之类的方法获取上下文
当然考虑过Apple's instruction on this。但是,这样做会阻止菜单绘制蓝色高亮背景和复选标记。此外,据我所知,我将不得不实施例如mouseUp
我自己。
总结一下:有没有办法获得(几乎)全功能菜单,我只自定义菜单项标题通常所在的内容(甚至可能没有自定义视图)?
答案是:没有
由于您要替换菜单项的整个视图,因此您要负责绘图和处理事件。
我想要一个包含几个 NSMenuItem
的 NSMenu
。这些项目的行为应与 "normal" NSMenuItem
s 相同,但有一个例外:我希望能够绘制 contents(即 "foreground" ) 我自己的每一项。
即:
我希望操作系统在我用鼠标悬停时绘制蓝色突出显示,绘制复选标记或破折号(表示"selected"/"part of multi-selection")。此外,我想要 "normal",即 menu-built-in mouse/keyboard 行为。
我想画 "contents" 我自己: 理想情况下,我想我必须 implement/override 一张方法
drawMenuItem:withCGContext:inRectangle:withTextColor
,它基本上获取项目,要绘制到的CGContext
,项目的NSRect
,以及[=59将使用的文本颜色 =] OS 如果它自己绘制项目。
我知道(强烈怀疑)我的愿望可能太多了,但如果有足够的东西我会非常满意(例如,我可以想象自己从 NSMenuItem
中获取 NSRect
,使用 [NSColor selectedMenuItemTextColor]
之类的方法获取颜色,使用 [NSContext currentContext]
).
当然考虑过Apple's instruction on this。但是,这样做会阻止菜单绘制蓝色高亮背景和复选标记。此外,据我所知,我将不得不实施例如mouseUp
我自己。
总结一下:有没有办法获得(几乎)全功能菜单,我只自定义菜单项标题通常所在的内容(甚至可能没有自定义视图)?
答案是:没有
由于您要替换菜单项的整个视图,因此您要负责绘图和处理事件。