首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MonoMac NSDrawThreePartImage /C绑定

MonoMac NSDrawThreePartImage /C绑定
EN

Stack Overflow用户
提问于 2012-12-07 23:12:39
回答 1查看 323关注 0票数 1

我想在我的MonoMac应用程序中使用函数NSDrawThreePartImage (Application Kit Functions Reference)。然而,它对我来说是不可用的。

看一下NSCell.cs的源代码,我可以看到它被注释掉了:

代码语言:javascript
复制
//APPKIT_EXTERN void NSDrawThreePartImage(NSRect frame, NSImage *startCap, NSImage *centerFill, NSImage *endCap, BOOL vertical, NSCompositingOperation op, CGFloat alphaFraction, BOOL flipped);

我猜这只是意味着,它从来没有实现过。

我知道这是一个C API。手动调用此方法可能涉及什么?看起来它可以通过一个Pinvoke (Binding Objective-C Types)来完成。有人能确认这是正确的方法吗?

其次,我不熟悉如何做这件事,因为方法参数不是简单的原语。也许有一个很好的指南可以做到这一点,或者一些现有的例子我可以参考?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 02:28:33

因为它是一个C API,所以你可以简单地使用P/Invoke来绑定它。

关于复杂类型:

  • NSRect成为example.
  • NSImage *RectangleF -请参阅monomac/src/AppKit/NSGraphics.cs中的IntPtr成为RectangleF-使用接受NSGraphics.RectClip的构造函数来构造它它的bool属性来获取简单的address.
  • GCFloatbool(有关<代码>D24枚举的example).
  • Use int,请参见NSGraphics.BestDepth。<代码>H225<代码>F226

所以,把这些部分放在一起,像这样应该可以做到:

代码语言:javascript
复制
[DllImport (Constants.AppKitLibrary)]
extern static void NSDrawThreePartImage (RectangleF rect, IntPtr startCap, IntPtr centerFill, IntPtr endCap, bool vertial, int op, float alphaFraction, bool flipped);

public void DrawThreePartImage (RectangleF frame, NSImage startCap, NSImage centerFill, NSImage endCap, bool vertical, NSCompositingOperation op, float alphaFraction, bool flipped)
{
    // Or throw ArgumentNullException if NULL is not allowed here
    var startCapPtr = startCap != null ? startCap.Handle : IntPtr.Zero;
    var centerFillPtr = centerFill != null ? centerFill.Handle : IntPtr.Zero;
    var endCapPtr = endCap != null ? endCap.Handle : IntPtr.Zero;
    NSDrawThreePartImage (frame, startCapPtr, centerFillPtr, endCapPtr, vertical, (int)op, alphaFraction, flipped);
}

NSDrawNinePartImage应该以类似的方式工作。

不知道为什么它被注释掉了,最有可能的是它从来没有实现过。还有更多缺失的部分。让我知道它是否适用于您,我会为您将其添加到NSCell.cs。

编辑:我刚把这个添加到了NSCell.cs:https://github.com/mono/monomac/commit/7c60d5756c49331642d2348c7c83320b9ec3f549。非常感谢您对此进行测试!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13765805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档