但是,当我注入已经运行的应用程序时,由于窗口已经被绘制,我无法给出所需的效果.所以,我正在寻找石英/核心图形中的东西,这可以让我重绘整个窗口或一些技术,这可以让我发送一些事件/调用一些功能,这将使系统重新整个窗口.
我的意思是窗口上的每个东西都要再次绘制,这样我的钩子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重绘自己?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)