C++ 获取插入点的窗口坐标-Cocoa

C++ 获取插入点的窗口坐标-Cocoa,c++,macos,cocoa,coordinates,C++,Macos,Cocoa,Coordinates,在Cocoa中获取文本编辑控件中当前插入符号位置的窗口坐标的最佳方法是什么 以下是我在其他平台上如何做到这一点 Windows-EM\u POSFROMCHAR GTK-使用GTK\u text\u view\u获取iter\u位置和GTK\u text\u view\u buffer\u到窗口协调 我想知道如何用可可粉做同样的事情。我在MaCOSx0.68,我用C++做这个。< /P> < P>假设代码>文本视图< /代码>是指向文本视图的变量,窗口< /C> >是指向窗口的变量: // -f

在Cocoa中获取文本编辑控件中当前插入符号位置的窗口坐标的最佳方法是什么

以下是我在其他平台上如何做到这一点

  • Windows-
    EM\u POSFROMCHAR
  • GTK-使用
    GTK\u text\u view\u获取iter\u位置
    GTK\u text\u view\u buffer\u到窗口协调

  • 我想知道如何用可可粉做同样的事情。我在MaCOSx0.68,我用C++做这个。< /P> < P>假设代码>文本视图< /代码>是指向文本视图的变量,<代码>窗口< /C> >是指向窗口的变量:

    // -firstRectForCharacterRange:actualRange returns a frame rectangle
    // containing the insertion point or, in case there's a selection,
    // the first line of that selection. The origin of the frame rectangle is
    // in screen coordinates
    NSRange range = [textView selectedRange];
    NSRect screenRect = [textView firstRectForCharacterRange:range actualRange:NULL];
    
    // -convertRectFromScreen: converts from screen coordinates
    // to window coordinates
    NSRect windowRect = [window convertRectFromScreen:screenRect];
    
    // The origin is the lower left corner of the frame rectangle
    // containing the insertion point
    NSPoint insertionPoint = windowRect.origin;
    

    文档中提供了以下方法

    -(void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor*)a颜色翻转(BOOL)标志

    上面说

    调用此方法时,焦点必须锁定在接收器上。您不需要直接调用此方法


    如果在NSTextView子类中重写此方法(并调用超级实现),它将允许您知道插入点的位置,至少在Cocoa需要时是这样。

    I将在NSTextView中进行ineterested。谢谢你的研究。还有一个问题:你把问题标注为C++,但COOCA主要提供Objul-C API。Objto-C(Objul-C++)是一种可行的解决方案,还是只对C++感兴趣?关于如何解决问题的任何想法都是足够好的。我可以解决语言问题。再次感谢。C++中的?这看起来不像任何C++。我在“问题”中看到评论部分。BTW,什么是<代码>窗口< /代码>变量?
    NSWindow的实例
    ?如果是,我是否应该传递显示
    NSTextView
    的窗口实例?我很困惑,因为这在微软Windows和GTK中略有不同。在这两种情况下,每个类似于文本字段的项目实际上都是窗口/小部件的实例。因此,要将屏幕坐标转换为窗口坐标,提供的窗口就是文本字段本身。但在这里,NsTextView不是一个窗口。所以我很困惑。你能帮助吗?在C++中?这看起来不像C++所看到的。如果你想使用COCOA(它是Apple提供的基础和AppKIT框架的组合),API是在Obj-C中。如果你查阅NSTExVIEW的文档,它是一个Obj-C接口,带有Obj-C方法。这是绕不开的。