Jus*_*tin 3 macos cocoa nswindow
出于好奇,我开始试图找出Cocoa如何创建窗户.我发现的所有库都使用Cocoa作为核心,我似乎无法在网上找到任何东西.
我尝试使用Carbon,但它没有做任何事情,只是给我一个关于未被声明的函数的警告.
我想我真正想要的是一种与Quartz Compositor接口的方法.
有什么方法可以让我看一下真正的窗口创建代码吗?
Pet*_*sey 11
我没有太多细节可以给你,但我可以指出你的方向.
有一个级别,这是Quartz Window Services.这就是NSWindow和Carbon的Window Manager所依据的.
即使在公共API中,偶尔也会窥视它.您可以向任何窗口询问其窗口编号(以及同样在Carbon中),并且可以使用公共Quartz Window Services API中的任何内容.但是,这并没有让你走得太远:除了截屏之外,你无法做到这一点.
但是,如果您要使用Quartz创建一个窗口,那么(可能 - 我从未尝试过这个)将是空白的.标题栏和背景分别绘制.
要做到这一点,NSWindow有第二个视图ivar为视图称为框架视图,可能使用HITheme.(惊人的数量甚至是公开的 - 例如,有一个HIThemeDrawWindowFrame!它是公开的!)窗口管理器可能做类似的事情.
[已添加] 这是一个使用HITheme绘制窗口的测试应用程序(在常规NSView中).

正如您所看到的,它并不完美:除了其他方面,阴影半径和标题栏高度都是硬编码的.但这是一个开始,并且是一个体面的示范.
快速摘要:
HIThemeDrawWindowFrame目前只是绘制标题栏和红绿灯.没有标题文本(它不带字符串,因此无法绘制它),也没有窗口背景,框架轮廓或阴影.HIThemeSetFill.然后,使用HIThemeGetWindowShape(请注意:尽管名称,您需要使用CFRelease此形状获得的形状),然后使用,将该形状设置为上下文的当前路径,以获取窗口结构区域的HIS 形状HIShapeReplacePathInCGContext.那么,CGContextFillPath正常.HIThemeDrawTextBox.您应该能够使用HIThemeGetWindowShape,但是,从Lion开始,它将返回一个空的形状.| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |