2012-11-14 46 views
2

我正在使用MFC和C++,但我不確定如何正確解耦需要彼此交互的兩個頂層對話框。具體來說,其中一個對話框(比如對話框X)應該執行一個動作來響應另一個對話框上的按鈕單擊(比如對話框Y)。目前在代碼庫中實現的方式是,Y的構造函數將一個指向X的指針作爲參數。然後使用此指針在單擊其自己的按鈕時對X執行操作。這看起來像是一個不合理的限制,否則將是一個通用的對話框。我希望能夠做的是讓X註冊某種監聽器來收聽來自Y的按鈕點擊消息。不幸的是,我還沒有發現任何暗示這是可能的東西。我已經考慮解耦頂層MFC對話框

兩種選擇:

  1. 註冊一個自定義的消息,並與Y發送到X(高度耦合的...)
  2. 廣播消息,並在X聽它(似乎過高)

我對MFC比較陌生,不太熟悉MFC社區的習語或最佳實踐。我非常感謝有關如何正確分離對話的任何想法或建議。

回答

2

最簡單的方法是指定自定義WM_APP + x消息,並維護一個列表HWND以在事件發生時通知您。但是,更現代的方法是Observer pattern。這涉及到創建一個IObserver和一個ISubject接口,這幾乎都以相同的方式工作。然後你的對話框將實現這些接口。這個解決方案的優點是你可以有非基於HWND的類監聽你的事件。而且,發送消息的成本更高。

+0

觀察員+1也爲觀察者 –

+0

+1 – patriiice