出于好奇,我开始尝试弄清楚Cocoa如何创建窗口。我找到的所有库都使用Cocoa作为核心,但似乎在网上找不到任何东西。
我尝试使用Carbon,但它除了给我一个有关未声明函数的警告外什么也没做。
我想我真正需要的是一种与Quartz Compositor进行接口的方法。
有没有办法让我看看“真正”的窗口创建代码?
HIThemeDrawWindowFrame
目前只绘制标题栏和红黄绿按钮。没有标题文本(它不接受字符串,因此无法绘制),也没有窗口背景、框架轮廓或阴影。HIThemeSetFill
将窗口背景画刷设置为上下文的填充颜色。然后,使用 HIThemeGetWindowShape
获取窗口结构区域的 HIShape(注意:尽管名称如此,但您需要从中释放形状),然后使用 HIShapeReplacePathInCGContext
将该形状设置为当前路径。然后像平常一样使用 CGContextFillPath
。HIThemeDrawTextBox
。您应该能够使用 HIThemeGetWindowShape
获取标题文本形状,但是,从 Lion 开始,它返回一个空形状。// Creating Windows
extern CGError CGSNewWindowWithOpaqueShape(CGSConnection cid, int always2, float x, float y, CGSRegionRef shape, CGSRegionRef opaqueShape, int unknown1, void *unknownPtr, int always32, CGSWindowID *outWID);
extern CGError CGSReleaseWindow(CGSConnection cid, CGSWindowID wid);
extern CGContextRef CGWindowContextCreate(CGSConnection cid, CGSWindowID wid, void *unknown);
NSWindow
与任何东西都不是无缝桥接的,也不会暴露任何核心<任何>对象,因为它是窗口的本地表示。像你研究过的包装器库一样,保持一个NSWindow
。 - Tommy