« 財源は未来 |メイン| ウィンドウ位置保存その2 »

ウィンドウ位置保存 | July 30, 2008 3:13 PM _ prgramming

管理用のパレットを独立させるから複数のウィンドウ(ダイアログ)が表示されるわけだけど、
大抵のお絵かきツールはウィンドウ情報を保持してる(物によってはパターン保存可能)のを実装しようとして少し詰まったのでメモ。

CWndManager(ウィンドウ管理クラス) → CConfigManager(ウィンドウ情報)
  ↓ ↓
ウィンドウ群.......

てなクラスで、本当はウィンドウクラス側でメッセージを処理してCConfigManagerに渡せれば良いんだけど、親クラスを持たせるとかの相互依存をあんまりやりたくないのでスレッドで処理することに。

具体的には、
CWndManagerのコンストラクタでスレッド生成
 ↓
数分置きにウィンドウクラスの情報をチェックしCConfigManagerに渡す
 ↓
CConfigManagerのデストラクタで状態を外部ファイルへ書き出し

で、スレッドを作るに当たってCreateThreadを使おうとするのだけれどビルドでエラーを吐く。
何でかなーと思ったら、スレッド関数はクラス内で使うときstaticしなければならないらしい。

なるほど。
これってメンバ関数だと実行アドレスが定まらないからって理由?
クラス時のメモリ周りの挙動があんまり分かってないのがこんなにも早く影響するとは。
C++に関しても、もっと勉強を進めないと。


と、ここで問題発生。
いやまぁ普通の人ならstaticとか言った時点で気づくんだろうけど、この方法じゃ無理だ……
そうだよね。staticから非static読み出せるわけないじゃん。
しかしそうするとどうした物かなぁ。
スレッドが駄目となると、やはりウィンドウ毎に情報クラスを持たせてやるしか無いのだろうか。
依存関係が複雑になるのは嫌いなんだよなぁ。
どうにかシンプルにすませたい。

« 財源は未来 |メイン| ウィンドウ位置保存その2 »

Σ(・×・)