gpt4 book ai didi

c++ - 如何使 wxFrame 表现得像模态 wxDialog 对象

转载 作者:可可西里 更新时间:2023-11-01 17:43:45 25 4
gpt4 key购买 nike

是否有可能使 wxFrame 对象表现得像模态对话框,因为创建 wxFrame 对象的窗口会停止执行,直到 wxFrame 对象退出?

我正在研究 small game并遇到了以下问题。我有一个托管主应用程序(战略部分)的主程序窗口。有时,我需要将控制转移到第二个窗口以解决部分游戏(战术部分)。在第二个窗口中,我希望第一个窗口中的处理停止并等待第二个窗口中完成的工作完成。

通常模式对话框可以解决问题,但我希望新窗口具有一些我似乎无法通过 wxDialog 获得的功能,即底部的状态栏和调整大小/最大化/最小化的能力窗口(这应该可行但不起作用,请参阅此问题 How to get the minimize and maximize buttons to appear on a wxDialog object )。

作为补充说明,我希望第二个窗口的功能需要与主窗口完全分离,因为它最终会被分离到一个单独的程序中。

有没有人做过这个或者有什么建议?

最佳答案

我也在寻找类似的解决方案并想出了这个解决方案,创建一个框架,通过执行 frame.MakeModal() 禁用其他窗口并在显示框架后停止执行开始和事件循环,当框架关闭时退出事件循环,例如我这里是使用 wxpython 的示例,但它在 wxwidgets 中应该类似。

import wx

class ModalFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, style=wx.DEFAULT_FRAME_STYLE|wx.STAY_ON_TOP)

btn = wx.Button(self, label="Close me")
btn.Bind(wx.EVT_BUTTON, self.onClose)
self.Bind(wx.EVT_CLOSE, self.onClose) # (Allows main window close to work)

def onClose(self, event):
self.MakeModal(False) # (Re-enables parent window)
self.eventLoop.Exit()
self.Destroy() # (Closes window without recursion errors)

def ShowModal(self):
self.MakeModal(True) # (Explicit call to MakeModal)
self.Show()

# now to stop execution start a event loop
self.eventLoop = wx.EventLoop()
self.eventLoop.Run()


app = wx.PySimpleApp()
frame = wx.Frame(None, title="Test Modal Frame")
btn = wx.Button(frame, label="Open modal frame")

def onclick(event):
modalFrame = ModalFrame(frame, "Modal Frame")
modalFrame.ShowModal()
print "i will get printed after modal close"

btn.Bind(wx.EVT_BUTTON, onclick)

frame.Show()
app.SetTopWindow(frame)
app.MainLoop()

关于c++ - 如何使 wxFrame 表现得像模态 wxDialog 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/883498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com