活动窗口没有从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中的错误吗?更好的方法吗?
答案 0 :(得分:0)
在GTK下,一个框架在获得焦点时变为活动状态,因此根据WM的焦点策略,如果你只是通过标题栏拖动它,它可能不被认为是活动的,如果它实际上没有给它对焦。
我不确定这是否可以在wxGTK级别更正,但您肯定可以解决此问题,方法是每次在代码中调用movedByProgram
时设置Move()
标志并重置在wxEVT_MOVE
处理程序中。然后,您只需检查此标志是否未设置就能检测到用户移动。