如何在两个不同的笔记本中交换两个wxWindows?

问题描述:

我们的应用程序基于wxWidgets,专为两台显示器而设计。每个显示器都有一个wxAuiNotebook,它们又有一个我们要渲染的wxGLCanvas。如何在两个不同的笔记本中交换两个wxWindows?

我想要一个热键来切换两个wxGLCanvas窗口,所以用户的体验是,监视器#2上的画布现在正在渲染到#1,反之亦然。 (画布周围有一堆工具栏和小部件,但我不希望它们切换显示器。)

wxGLCanvas是wxWindow的子类,所以我猜测它可能发生在关卡中。我应该注意哪些函数调用来完成此操作?

对不起我的问题含糊不清。它与我对wxWidgets的理解水平一致。

+0

所以你想只有GL画布交换或笔记本以及? – Igor

+0

@Igor,只需GL画布 – buttonsrtoys

+2

即可尝试呼叫Reparent()。检查文档是否可用于GLCanvas。无论如何,如果你在这些笔记本上有工具栏和菜单,你也可能需要它们切换。此外,由于2台显示器可能具有不同的分辨率,特别是在GTK上,可能会出现问题,因此可能无法正常工作。在wx-dev归档中查看有关HiDPI的最新主题。 – Igor

你确实可以使用Reparent(),但两个wxGLCanvas ES它将使更多的意义在你的代码,只需使用指针给他们,只是它们翻转,当你想切换他们,因为这只是其内容的事项,而不是窗户本身。

+0

的GL-上下文“接合”到*手柄设备上下文*用于窗[MS DOC](https://msdn.microsoft.com/es-es/library/windows/desktop/dd374379(V = vs.85)的.aspx)。所以,我怀疑只是交换指针就足够了。如果某个机构成功尝试了它,我想知道。 – Ripi2

+0

[这datenwolf大师回答(https://*.com/questions/44840267/will-wglcreatecontext-fail-safely-if-a-directx-context-already-exists-for-the)说,VZ是正确的如果像素格式兼容,则HDC是可交换的。 – Ripi2

+0

我会用什么方法交换指针?作为一个测试,我尝试删除一个wxGLCanvas,并使用notebook-> RemovePage(canvas-> GetID())和notebook-> AddPage(canvas)将其添加回同一窗口。它删除画布渲染,但它不会回来 – buttonsrtoys