如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样

How do you code merging different executables into a single window frame? Like browsers do?

本文关键字:框架 编码 一样 浏览器 窗口 一个 合并 可执行文件      更新时间:2023-10-16

好吧,这里有一个小问题:例如,如何对浏览器的功能进行编码?例如,打开chrome浏览器,就可以打开多个选项卡。然后,您可以将一个选项卡移出窗口,它就变成了另一个窗口,有自己独立的过程。然后你可以把那个标签拖到另一个窗口,它们就变成了一个框架?类似于windows应用程序中的对接,但如何使用可执行文件?

Windows特定的答案,尽管我认为其他操作系统的工作原理基本相同:为窗口获得的HWND句柄是全局的。如果你把它的数值发送给另一个进程,该进程可以用它来处理窗口:获取它的信息,调整它的大小,甚至在它上面绘图。它不能做的是替换它的事件处理程序函数。

要像现在的浏览器一样实现进程分离,关键是创建一个容器窗口并将句柄发送给子窗口。然后,子窗口将创建自己的窗口作为容器的子窗口。子窗口只是填充容器的整个内容区域。

通过这种方式,内容进程包含在父窗口中,但可以处理事件。

现在,如果您想将一个选项卡拖到它自己的顶级窗口中,父进程会创建一个新的顶级窗口,其中包含所有UI,然后将内容容器重新设置为该新顶级窗口的父级。内容子级跟随。

我不能告诉你如何编码它,你应该在chrome代码中搜索功能来了解它是如何编码的,但我可以告诉你它是如何工作的:

在铬内部,每个选项卡、扩展、实用程序等都是一个过程,这些过程中的每一个都是";浏览器";过程;浏览器";该过程管理一切(创建新窗口、打开新选项卡、关闭选项卡、销毁窗口等(,因此,例如,每当您打开chrome的新实例时,您都会告诉";浏览器";创建一个新选项卡并将其放入一个新窗口的过程。每个窗口都由";浏览器";进程,每个选项卡都由主进程的子进程管理。

现在回答您的问题:当您拖动&将选项卡放在您正在触发的事件的窗口外;浏览器";然后创建一个新窗口并将选项卡分配给新窗口的过程。

这些信息应该会提示你如何自己开发这个功能。

如果你想了解更多关于铬建筑的信息,我建议你阅读铬是如何在https://www.chromium.org/developers/design-documents