【问题标题】:how to get the "non-maximzed" state of a to wxWidget window如何获得 wxWidget 窗口的“非最大化”状态
【发布时间】:2011-10-20 16:46:37
【问题描述】:

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

默认情况下,当您最大化一个窗口时,当您再次单击最大化按钮时,您会恢复初始(非最大化)位置/大小。但是当我保存我的偏好时,我唯一能得到的位置和大小就是最大化的那个。所以当用户重新启动它的应用程序,并且想要“取消最大化”它时,窗口仍然会占据整个屏幕。

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

所以我尝试在“SetMaximize(false)”调用之后添加一个 Sleep(),但我需要使用一个非常高的值来确保它始终工作,我不喜欢这样。

所以,我的问题是:有没有办法获得非最大化窗口的位置和大小? (我也试图捕捉调整大小事件,但它只适用于大小,我也需要位置......并且没有找到任何“窗口移动”事件)

提前感谢您的帮助!

【问题讨论】:

  • 哦,我的 google fu 不够强大 :( 我找到了一种方法来完成这项工作,但它仅限于 Windows。所以我仍然很想知道是否有任何方法可以做并且仍然是跨平台的。如果有人对“仅限 Windows”的解决方案感兴趣,请在此处查看:msdn.microsoft.com/en-us/library/windows/desktop/…

标签: c++ wxwidgets


【解决方案1】:

我这样做:

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

它适用于 Win7/XP 和 Linux。

【讨论】:

  • 谢谢,我知道这些方法,但正如我所解释的,它们没有返回我需要的值:假设我的窗口在 并且它的大小是 现在,我最大化我的窗口。 GetPosition 和 GetSize 现在将返回 和 而我想要原始位置和大小,所以这对我不起作用,因此我的原始问题 ^^
【解决方案2】:

这很容易。

“窗口移动”类是 wxMoveEvent,捕捉任何移动的事件类型是 wxEVT_MOVE。所以在你的顶层窗口类中定义一个函数,

void MyFrame::OnMove(wxMoveEvent& evt);

这样绑定:

绑定(wxEVT_MOVE, &MyFrame::OnMove, this);

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

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多