2014-01-28 61 views
1

活動窗口在wxGTK下的IsActive()中沒有返回true。wxGTK中的wxFrame :: IsActive()

我的軟件有一個主窗口和一組工具窗口,全部源自wxFrame。 移動主窗口時,捕捉移動事件並在所有工具窗口中調用位置方法,以便它們一起移動。

每個工具窗口都可以獨立移動,當用戶移動它們時,我需要捕捉移動事件並更新它們相對於主窗口的位置。要檢查它們是否被用戶移動或主窗口使用IsActive()。這適用於wxMSW和wxOSX,但不適用於wxGTK。

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

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

工具箱從wxFrame派生

這是wxGTK的錯誤嗎?更好的方式來做到這一點?

回答

0

在GTK下,一個框架在焦點時變得活躍,所以根據WM的焦點策略,如果只是通過標題欄拖動它,可能不會被視爲活動的,如果這實際上並沒有給它專注。

我不知道這是否可以在wxGTK水平得到糾正,但你絕對可以通過具有movedByProgram標誌,該標誌將每次在你的代碼中調用Move()wxEVT_MOVE處理器復位時間設定解決這個問題。然後,您只需檢查此標誌是否未設置即可檢測用戶移動。

+0

感謝您的信息。這是一個很好的解決方法,但不幸的是工作並不順利。它可以檢測用戶的移動是否正常,但在主窗口的控制下移動窗口只能在非常緩慢的情況下運行。更快的移動似乎會觸發標誌復位後發生的附加移動事件。 目前在Ubuntu中使用Unity進行測試。 到目前爲止,最好的解決方法是通過檢測其面板中的鼠標單擊來顯式設置活動窗口,但這並不理想。即使使用窗口中的控件仍會對IsActive()產生錯誤的響應。 – doctorafternoon

+0

嘗試重置下一個'wxEVT_IDLE'中的標誌,這是駭人聽聞,但應該照顧到這個問題。 –