Java 从指针在Objective-C中创建NSWindow?
假设我正在使用LWJGL 3创建一个窗口,该窗口允许我通过GLFWNativeCocoa#GLFWGetCoCoCoaWindow(长:窗口)获取指向底层NSWindow的指针,即: 使用这个指针,如果我执行本机调用并将其传递给objective-C函数,是否可以实例化NSWindow或获取对它的引用,以便从较低的级别操作该窗口Java 从指针在Objective-C中创建NSWindow?,java,objective-c,accessibility,lwjgl,Java,Objective C,Accessibility,Lwjgl,假设我正在使用LWJGL 3创建一个窗口,该窗口允许我通过GLFWNativeCocoa#GLFWGetCoCoCoaWindow(长:窗口)获取指向底层NSWindow的指针,即: 使用这个指针,如果我执行本机调用并将其传递给objective-C函数,是否可以实例化NSWindow或获取对它的引用,以便从较低的级别操作该窗口 Cheers在lwjgl源代码中快速搜索glfwGetCocoaWindow,结果给出了以下示例:modules/samples/src/test/java/org/l
Cheers在lwjgl源代码中快速搜索
glfwGetCocoaWindow
,结果给出了以下示例:modules/samples/src/test/java/org/lwjgl/demo/glfw/Gears.java
。在本例中,它们不会对CoCoCoaWindow
处理程序执行直接向上的Objective-C调用,而是对该窗口句柄上的选择器执行msgSend。代码如下:
if ( Platform.get() == Platform.MACOSX ) {
long cocoaWindow = glfwGetCocoaWindow(window);
long objc_msgSend = ObjCRuntime.getLibrary().getFunctionAddress("objc_msgSend");
long contentView = invokePPP(objc_msgSend, cocoaWindow, sel_getUid("contentView"));
invokePPV(objc_msgSend, contentView, sel_getUid("setWantsBestResolutionOpenGLSurface:"), false);
boolean bool = invokePPZ(objc_msgSend, contentView, sel_getUid("wantsBestResolutionOpenGLSurface"));
System.out.println("wantsBestResolutionOpenGLSurface = " + bool);
}
与上述代码中的“contentView”
不同,尝试不同的选择器是值得的
if ( Platform.get() == Platform.MACOSX ) {
long cocoaWindow = glfwGetCocoaWindow(window);
long objc_msgSend = ObjCRuntime.getLibrary().getFunctionAddress("objc_msgSend");
long contentView = invokePPP(objc_msgSend, cocoaWindow, sel_getUid("contentView"));
invokePPV(objc_msgSend, contentView, sel_getUid("setWantsBestResolutionOpenGLSurface:"), false);
boolean bool = invokePPZ(objc_msgSend, contentView, sel_getUid("wantsBestResolutionOpenGLSurface"));
System.out.println("wantsBestResolutionOpenGLSurface = " + bool);
}