wxWidgets(甚至OOP GUI)多个窗口



我有点卡在某件事上;关于在OOP中生成多个表单。

消息循环大部分时间是(wxWidget的情况)window->show();

bool MyApp::OnInit()
{
    MainWindow *oWindow = new MainWindow(wxT("My Window"));
    oWindow->Show(true);
    return true;
}

其他人有 oWindow->run(),但无论如何我的问题是:

我创建了第二个线程,其结构与上述函数完全相同,并称为消息循环方法。问题是窗口突然出现并消失,这对我来说没有意义。但是,如果我打电话:

MainWindow *oWindow = new MainWindow(wxT("My Window"));
        oWindow->Show(true);
MainWindow *oWindow2 = new MainWindow(wxT("My Window"));
        oWindow2->Show(true);

它会起作用,但我不希望这样,因为我需要跟踪我创建的窗口并将它们放在单独的线程上。我能做什么?

您不能在主线程以外的任何位置运行 wxWidgets 窗口。

"GUI 调用,例如对 wxWindow 或 wxBitmap 的调用,在辅助线程中显然根本不安全,并且可能会过早结束您的应用程序。这是由于几个原因,包括底层原生 API 以及 wxThread 不会运行类似于 MFC 等其他 API 的 GUI 事件循环。

http://docs.wxwidgets.org/2.8/wx_wxthread.html

顺便说一句,我无法想象你想做的事情是一个好主意的任何情况。 永远不需要在多个线程中调整窗口。

Windows程序是事件驱动的。 您可以根据需要拥有任意数量的顶级窗口,但应该只有一个事件队列,以便两个窗口上的事件不会最终争用同一资源。 这就是为什么 wxWidgets 阻止您尝试创建两个同时处理窗口事件的线程。

相关内容

  • 没有找到相关文章

最新更新