wxGT中的wxFrame :: IsActive()

时间:2014-01-28 14:47:50

标签: c++ gtk wxwidgets

活动窗口没有从wxGTK下的IsActive()返回true。

我的软件有一个主窗口和一组工具窗口,全部来自wxFrame。 移动主窗口时,它会捕获移动事件并在所有工具窗口中调用位置方法,以便它们一起移动。

每个工具窗口都可以独立移动,当用户移动它们时,我需要捕捉移动事件并更新它们相对于主窗口的位置。要检查它们是否被用户或主窗口移动,我使用IsActive()。这在wxMSW和wxOSX下工作正常,但不能在wxGTK下工作。

void ToolBox::OnMove(wxMoveEvent& event)
{
    wxPoint shift;

    if(IsActive()) {
        wxPoint newpos = GetPosition();
        (calculate new postion)
    }   
}

ToolBox派生自wxFrame

这是wxGTK中的错误吗?更好的方法吗?

1 个答案:

答案 0 :(得分:0)

在GTK下,一个框架在获得焦点时变为活动状态,因此根据WM的焦点策略,如果你只是通过标题栏拖动它,它可能不被认为是活动的,如果它实际上没有给它对焦。

我不确定这是否可以在wxGTK级别更正,但您肯定可以解决此问题,方法是每次在代码中调用movedByProgram时设置Move()标志并重置在wxEVT_MOVE处理程序中。然后,您只需检查此标志是否未设置就能检测到用户移动。