[CoveredCalc for BeOS] 表示しないウィンドウ
ここ数日(と言っても 1 日に数十分しかかけてないけど)初期状態では表示しないウィンドウをどうやって生成したらいいのか悩んでました。
BWindow はコンストラクタで生成した時点では、ウィンドウも非表示だし、そもそもスレッドが開始しておらずメッセージループも回っていません。また、コンストラクタを呼び出したスレッドによってロックされた状態になっています。 初回の Show() を呼び出すことで、スレッドが開始し、それによってメッセージループが回ります。また、ロックも解除されます。 しかし、カバーブラウザウィンドウは生成したあと、すぐには表示したくなかったのです。 (ユーザの操作によって表示状態の切り替えを行うので。デフォルトは非表示です。) 1) 生成時、Show() を呼ばずに放っておく。 → ユーザの操作で Show() を呼び出すと、ウィンドウを生成したスレッド(今回の場合、BApplication のスレッド)とユーザの操作によるメッセージを受信したウィンドウのスレッドが違うので、初回の Show() で行われるロック解除に失敗しました。 2) 生成時、Show() を呼ばずに、Unlock() してみる。 → ユーザの操作で Show() を呼び出すと、結局、ユーザの操作によるメッセージを受信したウィンドウのスレッドがロックしてないので、初回の Show() で行われるロック解除に失敗しました。 3) 生成時、Show() を呼ばずに、Unlock() して、Show() するときに初回であればロックする。 → 初回の Show() かどうかを自分で判断しなければならないわけで、…それはイヤ。(試してません) 4) 生成時、Show() を呼ばずに、Run() を呼んでやる。(呼ぶなと Be Book に書いてあった気がするが) → ユーザの操作で Show() を呼び出してもうまくいった。…かのように見えたのですが、そのウィンドウのスレッド名に "w>" がついてません。通常は初回の Show() が何かやってるに違いありません。他の影響もまだ見えてないだけで、いずれ問題になりそうなので却下。 5) 【解決】生成時、一度 Hide() を呼んでから Show() を呼んでやる。 → Hide() と Show() はカウンタを持っているので、Hide() → Show() だと、それをする前と同じ状態になります。つまり、非表示状態のままです。でも、その Show() は初回の Show() として認識されるようで、"w>" 付きのスレッドも生成されるし、ロックも解除されたようです。 とりあえず、これで解決できた、と思っています。
by hironytic
| 2004-09-16 13:06
| 開発状況
|
検索
カテゴリ
以前の記事
2009年 12月
2009年 11月 2009年 10月 2009年 09月 2009年 04月 2009年 01月 2008年 11月 2008年 09月 2008年 08月 2008年 07月 2008年 05月 2008年 03月 2008年 02月 2008年 01月 2007年 12月 2007年 11月 2007年 09月 2007年 06月 2007年 05月 2007年 04月 2007年 03月 2007年 02月 2007年 01月 2006年 12月 2006年 11月 2006年 10月 2006年 09月 2006年 05月 2006年 04月 2006年 03月 2006年 01月 2005年 12月 2005年 11月 2005年 10月 2005年 09月 2005年 08月 2005年 07月 2005年 06月 2005年 05月 2005年 04月 2005年 03月 2005年 02月 2005年 01月 2004年 12月 2004年 11月 2004年 10月 2004年 09月 2004年 08月 2004年 05月 2004年 04月 2004年 03月 最新のトラックバック
関連リンク
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||