2012-01-18 3 views
7

私の直接的なコンテキストはWindowsプラットフォームですが、別のGUIホストでUIを操作するときにも同じ質問をすることがあります。私はATL/MFCを使わないで、かなり普通のC++ winapiで作業しています。私はグローバルの使用に興味はありませんが、むしろ "アプリケーション"データで "ウィンドウ"関連のタスクを実行するより寛大に受け入れられたプラクティスです。ウィンドウクラスからアプリケーション変数にアクセスするための適切な/受け入れられた設計は何ですか?

私はこれにmvvwまたはmvcスタイルのパターンを実装することを検討しましたが、先に進む前に、無数の経験豊富な開発者やデザイナーが想像しているところからいくつかのコミュニティの意見を聞きたいと思います。

My Applicationクラスには、ウィンドウメン​​バーがあります。 Windowクラスは、アプリケーション参照で設計する必要がありますか?それとももっと良い方法がありますか?

+0

あなたの 'TThread'クラスへのポインタはスレッドローカルストレージに入ります。クラス 'TThread'はそのデータメンバとして' TApplication'オブジェクトへのポインタを持っています。とにかく、 'TApplication'をグローバルにするのは意味があります。なぜなら、そのコンストラクタは' main'が呼び出される前に初期化を行う場所を提供するからです。 – lapk

+2

私は人々が(理由付きで)グローバル変数を避けるために多くの努力をしていることは知っていますが、時にはそれが現実を最もよく反映する仕組みです。なぜなら、常に「アプリケーション」というインスタンスが1つしか存在しない場合、なぜそれをグローバルにしないのでしょうか? –

+0

またはシングルトン... http://ja.wikipedia.org/wiki/Singleton_patternしかし、私はあなたのケースでは、アプリケーションオブジェクトAFAIUとなるすべての私のウィンドウオブジェクトにモデルへの参照を渡すことを好むでしょう。 –

答えて

1

ウィンドウのWin APIは、あなたが望むもの(つまり自分のウィンドウオブジェクト)へのポインタを定義できるSet/GetProperty()を提供します。しかし、私はそれがむしろ遅いことを経験から知っています。

他の可能性は、Win APIウィンドウのポインタがキーとして使用され、その値がウィンドウオブジェクトであるマップを使用することです。これははるかに高速ですが、グローバルがない場合はどこにマップを配置しますか?

サミュエルの示唆しているように、シングルトンを使うと、グローバルとほぼ同じオブジェクトを取得できます。次に、Win APIウィンドウポインタをキーとしてウィンドウオブジェクトを取得し、オブジェクトを返します。

受信イベントをウィンドウオブジェクトにマッピングするために必要です。それ以外の方法は、他の方法で行う必要があります(システムウィンドウと同様にマッピングされたウィンドウオブジェクト上の関数を呼び出してください)。

Qtを使用していないのはなぜですか?それは既にC++であり、あなたはそれらの詳細について心配する必要はありません。

関連する問題