用标准的Window 用wxWidgets 绘制成?

Posted

技术标签:

【中文标题】用标准的Window 用wxWidgets 绘制成?【英文标题】:Use standard Window to draw with wxWidgets into? 【发布时间】:2019-12-20 07:34:58 【问题描述】:

以下情况:我有一个基于wxWidgets的DLL,可以生成很多wxWidgets-GUI-elements。接下来是一个调用应用程序,它使用这个 DLL 及其函数。

这个调用实例例如可以是一个完全没有 wxWidgets 绑定的 C# 应用程序。它带有一个包含 wf:Panel 的自己的用户界面。

在下一步中,C# 应用程序检索此 wf:Panel 的 Windows HWND 并将其交给我的 DLL。此 HWND 是有效的本机 Windows 句柄。

我的问题:我必须在我的 DLL 中做什么才能将这个 HWND/这个 wf:Panel 用作 wxWidgets 元素,我可以在其中放置标准 GUI 元素,例如 wxButton/wxSizers 等等?

我找到了一个函数 SetHWND() 但这似乎并不能解决问题,因为它需要一个 wxWidgets 生成的面板,而我有一个在我的 C# 应用程序中生成的面板...

【问题讨论】:

@HansPassant 此函数仅返回 wxWidgets-objects - 但由于我的面板是用 C# 创建的,因此此函数为我返回 NULL 根据文档,您可以通过 id、标签或名称搜索窗口。你能要求开发者主应用程序给你这样的信息吗?那么您需要做的就是致电wxWindiw *parent = FindWindowByXXX(); if( parent) new wxButton( parent, ... );。看起来在 3.1.3 中有 FindItemByHWND(),但我在 master 文档中找不到它的文档。而且它不是静态的。 【参考方案1】:

您可以使用wxNativeContainerWindow 创建一个wxTopLevelWindow 代表您获得的外部HWND,然后将其用作所有其他窗口的父级。

【讨论】:

它不会在 C# 窗口之上创建另一个窗口吗?也许有可能使static wxWindow::FindWindowByHWND() 不,wxNativeContainerWindow 代表现有窗口,不会创建新窗口。 好的,当 HWND 来自 C#/WPF 应用程序时,这不起作用。虽然 HWND 有效,但 wxWidgets 不能将其用作父级。还有其他想法吗? “不能”是什么意思?会发生什么?

以上是关于用标准的Window 用wxWidgets 绘制成?的主要内容,如果未能解决你的问题,请参考以下文章

编译wxWidgets —— windowsvc71bcc32MinGW与命令行

用turtle库绘制标准中国国旗

wxWidgets刚開始学习的人导引——wxWidgets学习材料清单

room-views-用窗口颜色清除背景(Clear Background with Window Colour)选项

wxWidgets黑色配色设置

wxWidgets黑色配色设置