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

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

概述我已经开发了注射系统并且已经连接了一些石英API,以便在Mac OS X上为窗口创建一些很好的效果.例如,当用户在窗口中将颜色设置为红色时,它是红色光泽的红色. 但是,当我注入已经运行的应用程序时,由于窗口已经被绘制,我无法给出所需的效果.所以,我正在寻找石英/核心图形中的东西,这可以让我重绘整个窗口或一些技术,这可以让我发送一些事件/调用一些功能,这将使系统重新整个窗口. 我的意思是窗口上的每个 我已经开发了注射系统并且已经连接了一些石英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等重绘

总结

以上是内存溢出为你收集整理的objective-c – 强制窗口使用Core Graphics重绘自己?全部内容,希望文章能够帮你解决objective-c – 强制窗口使用Core Graphics重绘自己?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1236792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存