2

私はMFCとC++を使用していますが、相互作用する必要のある2つのトップレベルダイアログを適切に分離する方法がわかりません。具体的には、ダイアログの1つ(ダイアログXなど)は、他のダイアログ(ダイアログYなど)のボタンクリックに応答してアクションを実行する必要があります。これがコードベースに実装されている現在の方法は、Yのコンストラクターが引数としてXへのポインターを受け取ることです。次に、このポインターを使用して、独自のボタンがクリックされたときにXに対してアクションを実行します。これは、そうでなければ一般的なダイアログになるものに対する不合理な制限のように思われます。私ができることを望んでいたのは、XにYからのボタンクリックメッセージのある種のリスナーを登録させることでした。残念ながら、これが可能であることを示唆するものは何も見つかりませんでした。

私が検討した2つの選択肢:

  1. カスタムメッセージを登録して、YからXに送信します(高度に結合されています...)
  2. メッセージをブロードキャストし、Xでリッスンします(過度のようです)

私はMFCに比較的慣れておらず、MFCコミュニティのイディオムやベストプラクティスに特に精通していません。ダイアログを適切に分離する方法についてのアイデアや提案をいただければ幸いです。

4

1 に答える 1

2

最も簡単なアプローチは、カスタムWM_APP + xメッセージを指定HWNDし、イベントが発生したときに通知されるリストを維持することです。ただし、より現代的なアプローチはオブザーバーパターンです。これには、ほぼ同じように機能IObserverするインターフェイスの作成が含まれます。ISubject次に、ダイアログはこれらのインターフェースを実装します。このソリューションの利点は、HWNDベースではないクラスでイベントをリッスンできることです。また、メッセージの送信にはコストがかかります。

于 2012-11-15T08:32:29.210 に答える