2013-12-16 83 views
0

我正在研究具有多個窗口的項目。 我想在按下回車鍵時關閉活動窗口。確定窗口是否聚焦/活動/前景

問題是所有的窗戶都關閉了。我想檢查窗口是否聚焦/活動或在前景,以便我可以改變焦點,所以它不會關閉所有窗口。

當我運行代碼時,我總是得到「我不關閉」。過了一段時間,他們都關門了。

if(GetFocus() == currentWindow->getHandler() || GetForegroundWindow() == currentWindow->getHandler() || GetActiveWindow() == currentWindow->getHandler()) 
{      
       std::cout << "Is the same"; 
       if(windows.front() != currentWindow) 
       { 
        SetForegroundWindow(SetFocus(windows.front()->getHandler()));         
        DeleteWindow(currentWindow)      
       } 
       else 
       { 
        SetForegroundWindow(SetFocus(windows.back()->getHandler())); 
        DeleteWindow(currentWindow); 
       } 
      } 
      else 
      { 
       std::cout << "I dont close!"; 
       DeleteWindow(currentWindow); 
      } 
      Sleep(500); 
} 
+0

做一些調試。看看如果評估的條件如何。這將告訴你爲什麼選擇「我不關閉」分支。顯然我們不能告訴你。那個叫'睡眠'的電話是什麼? –

+0

我使用了調試,焦點窗口的更改按照我的規劃進行,但所有窗口仍然關閉。睡眠是這樣,我可以適當地監控它。否則,我每秒得到50次更改。在DeleteWindow(currentWindow)中,我只說exit(1);有沒有一種方法可以關閉窗戶? –

回答

0

我有類似的問題,像你的應用程序有多個窗口。我發現GetForegroundWindow將始終返回應用程序的頂級父窗口,而不是實際關注的窗口。此外,根據MSDN,GetFocus和GetActiveWindow將返回NULL,除非調用線程具有窗口的消息隊列(即它擁有該窗口)。所以,這可能就是爲什麼你的檢查沒有工作。

你試過GetGUIThreadInfo? hwndFocus成員保存具有鍵盤焦點的窗口。此函數對調用線程或窗口所有權沒有任何限制。