如何在同一容器(C ++)中显示来自不同应用程序的UI?

时间:2013-08-22 11:27:16

标签: c++ windows winapi

我想用c ++创建几个应用程序,每个应用程序都有自己的GUI。 所有应用程序将由另一个应用程序(应用程序A)启动。此应用程序将打开所有GUI应用程序。 我想要的是每个应用程序的UI内容将显示在同一窗口中。用户可以使用选项卡浏览每个应用程序的UI。用户应该只打开应用程序A,A将打开每个UI应用程序并在同一窗口中显示其界面。 有人可以给我一些方向来解决这个问题吗?我正在使用Visual Studio 2010 C ++进行开发。 (Windows应用程序)

1 个答案:

答案 0 :(得分:2)

如果您的ui应用程序可以将其Windows句柄传递给宿主应用程序,则可以执行此操作。在主机应用程序中,您需要将这些窗口重新显示在选项卡中。像这样:

// hWnd is the window we want to embed
long style = ::GetWindowLong(hWnd, GWL_STYLE);

style |= WS_CHILD;
style &= ~WS_POPUP;
style &= ~WS_CAPTION;
style &= ~WS_THICKFRAME;

SetWindowLong(hWnd, GWL_STYLE, style);
SetParent(hWnd, hostHWnd() /* this returns HWND of the host window */);

SetWindowPos(hWnd, HWND_TOP, 0, 0, hostWidth(), hostHeight(), SWP_SHOWWINDOW);
ShowWindow(hWnd, SW_SHOW);

例如,您可以通过命名管道传递窗口句柄。

但是准备好在这样做时遇到一些问题。例如,您需要在调整主机窗口大小时调整嵌入式窗口的大小(例如,通过调用SetWindowPos)。