objective-c – 强制窗口使用Core Graphics重绘自己?

前端之家收集整理的这篇文章主要介绍了objective-c – 强制窗口使用Core Graphics重绘自己?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经开发了注射系统并且已经连接了一些石英API,以便在Mac OS X上为窗口创建一些很好的效果.例如,当用户在窗口中将颜色设置为红色时,它是红色光泽的红色.

但是,当我注入已经运行的应用程序时,由于窗口已经被绘制,我无法给出所需的效果.所以,我正在寻找石英/核心图形中的东西,这可以让我重绘整个窗口或一些技术,这可以让我发送一些事件/调用一些功能,这将使系统重新整个窗口.

我的意思是窗口上的每个东西都要再次绘制,这样我的钩子API就会执行,以便创建正确的效果,阴影和颜色.这里命令创建了哪个窗口&画很重要.

我使用类似于inject&interpose的技术,注入代码是C/C++代码.

有谁知道如何实现这一目标?

解决方法

– [NSView setNeedsDisplayInRect:]和 – [NSView setNeedsDisplay:]是invalidateRect的直接等价物.

我不知道你在Quartz / CoreGraphics中需要它的意思.可可已经在使用它们进行绘画了.

如果你想调用一些魔术CGxxx()函数来重新绘制窗口,则无法完成.窗口的标题和框架由系统绘制,但对于内容,低级API无法知道应该在那里绘制什么.唯一知道如何绘制视图的人就是视图本身. (也许在窗口的后备存储中有一些缓存,但我不知道任何公共或未记录的API来访问它).

无论您发现什么,都必须基于要求NSWindow对象重新绘制其视图.如果您已经注入流程,则可能涉及以下步骤:

>定位obj-c运行时(至少需要objc_msgSend函数)>找到NSApplication类>使用[NSApplication sharedApplication]和 – [NSApplication windows]查找NSWindow *对象指针>使用contentView,display等重绘

原文链接:https://www.f2er.com/c/117082.html

猜你在找的C&C++相关文章