2025 01,22 17:47 |
|
2006 04,18 00:35 |
|
一部想像が入るけど理由らしい事がわかった。というより動くようになった。
海外も含めForumを検索すると2,3件同じような質問が出ていた。でも解決まではどれも書いていなかったので、色々試してみて動くようになった。 知っている範囲も含めた想像 1)すべてのWindowはユニークなタグ?(ハンドル)をつけてWindowManagerが管理している。 CreateWindowを呼ぶとWindowManagerにメッセージが送られ、指定した属性のWindowを作って、管理しているハンドルを返してくる。 2)TodayのアイテムはTodayのWindowの子Windowとして自分が更新するWindowを作る。 (階層構造になる) 3)TodayのアイテムはDLLの形でTodayのコンテキストとして動き、Todayがその動きを管理している。 4)Todayの下で動くアイテムは240番を持つInitializeCustomItemを用意しておき、必要な準備(Windowを作ったり、変数の初期化)をTodayから呼び出されて最初に1回だけ実行する。 2006/5/11-ここから誤り(多分コードミスで動かなかった) 5)その後アイテムは、初期化の中で作ったWindowにTodayやWindowManagerからQueueingされるMessageを受け取ったときのみ動ける。 のだと思う。 いくら自分の作ったWindowのハンドルを指定してSetTimerしても正常終了するが、指定したTimerProcは動かない。 2006/5/11-ここまで誤り(orz) GetParent(自分の作ったWindowのハンドル)で、親Windowのハンドルをもらって、SetTimerしたら指定したTimerProcが動いた。TimerProcで自分のWindowにSendMessageで(WM_PAINT、WM_TIMER、。。。)メッセージを送るようにすれば、自分のWindowに必要な処理が動かせる。 でもTimerIDはWindowごとにユニークなIDを指定する必要がある。プログラマが勝手にTimer IDを付けてTodayのWindowにSetTimerして良いのかな?エラーで戻ってくるだけか。。。 Timer IDに1、100、123(適当やねー)を指定してみたけどエラーにもならないし、変なことも起こらない。 しばらく使ってみて様子を見よう。メモリ・リークとか起こらないかCheckしないと。 PR |
|
コメント |
コメント投稿 |
|
trackback |
トラックバックURL |
忍者ブログ [PR] |