首页 > 解决方案 > 您如何编码将不同的可执行文件合并到一个窗口框架中?像浏览器一样?

问题描述

好的,这里有一个菜鸟问题:例如,您如何编写浏览器具有的此功能?例如,您打开一个 chrome 浏览器,您可以打开多个选项卡。然后,您可以将一个选项卡移出窗口,它变成另一个窗口,有自己的独立进程。然后你可以将该选项卡拖到另一个窗口中,它们变成一个框架?类似于 Windows 应用程序中的停靠,但是如何使用可执行文件来做呢?

标签: c++

解决方案


特定于 Windows 的答案,尽管我认为其他操作系统的工作方式几乎相同:HWND您为窗口获得的句柄是全局的。如果您将其数值发送到不同的进程,该进程可以使用它来处理窗口:获取其信息、调整其大小,甚至在其上绘图。它不能做的是替换它的事件处理函数。

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

这样,内容进程包含在父窗口中,但可以处理事件。

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


推荐阅读