如何获取 wxWidget 窗口的"non-maximzed"状态

how to get the "non-maximzed" state of a to wxWidget window

本文关键字:窗口 non-maximzed 状态 wxWidget 何获取 获取      更新时间:2023-10-16

我有一个小wxWidget应用程序,它可以将一些首选项保存到一个简单的xml文件中。在这些首选项中,我存储了顶层窗口的位置,大小和最大化状态,以便我可以在下次启动时恢复它。

默认情况下,当你最大化一个窗口时,当你再次点击最大化按钮时,你会得到你的初始(非最大化)位置/大小。但是当我保存我的偏好时,我唯一能得到的位置和大小是最大化的。因此,当用户重新启动应用程序,并想要"取消最大化"它时,该窗口仍将占据整个屏幕。

在Windows XP上,我做了一个小技巧,在获得位置和大小之前调用SetMaximize(false)。这工作得很好。但现在我在七号,这行不通了。似乎SetMaximize(false)被推迟了:当我中断时,它工作,但在正常执行期间,我总是以最大化的位置/大小结束,就好像unmaximize操作是在另一个线程中完成的。

所以我试着在我的"SetMaximize(false)"调用之后添加一个Sleep(),但我需要使用一个非常高的值来确保它总是工作,我不喜欢。

所以,我的问题是:有没有办法得到非最大化窗口的位置和大小?(我也试着抓住调整大小的事件,但它只适用于大小,我需要的位置也…没有发现任何"window moved"事件)

提前感谢您的帮助!

我用:

wxPoint pos = GetPosition();
wxSize size = GetSize();

可以在Win7/XP和Linux上使用

这很简单。

window-moved类是wxMoveEvent,用于捕捉任何移动的事件类型是wxEVT_MOVE。因此,在顶层窗口类中定义一个函数

空白MyFrame:: OnMove (wxMoveEvent&evt);

像这样绑定:

Bind(wxEVT_MOVE, &MyFrame::OnMove, this);

在OnMove函数和OnSize函数中,通过调用成员函数IsMaximized()来检查窗口是否被最大化。当它返回true时,不要更改位置和大小数据。