X作成講座 on TC(12) ごめんなさいのコーナー


 ごめんなさい(^^;) ここまで解説してきた中で、2つ間違いを見つけました。解説してる本人がまだまだ勉強中なので大目に見てやって下さいね(^^;)


 -- パレットウィンドウの Show/Hide について --

 パレットウィンドウの show/hide について勘違いがありました。

 今までの処理:
  アプリがバックグラウンドに回ったら無条件に隠す
  アプリがアクティブになったら無条件に表示する

 この処理だと、例えばユーザーがパレットを隠していた場合に、アプリがアクティブになったタイミングで表示状態になってしまうことになります。そこで、

 新しい処理:
  アプリがバックグラウンドに回ったら無条件に隠す
  アプリがアクティブになったら、アクティブだった時の状態に戻す

 とします。いやー、たまにおかしな動作をするなぁとは思いましたが、指摘されるまで気が付きませんでした(^^;) m(_ _)m

 この処理をするためにはパレットを隠す時に「アクティブだった時の状態」をどこかに保存しておかなければなりません。ウィンドウ個々のプライベートな情報の保存場所は・・・そう、refCon ですね。

 元々パレットウィンドウのサンプルソースは refCon にピクトのハンドルを入れていましたが、これに加えてウィンドウの visible 情報も保存しなければなりません。4バイトしかない refCon に4バイトを越える情報を入れるために、新たに「自前のハンドル」を作り、そのハンドルにピクトハンドルと visible 情報を入れることになります。そしてそのハンドル(のアドレス)を refCon に入れるわけです。前回「外部ウィンドウのプロパティ」で行ったのと同じ手法ですね。

 とゆーわけで、サンプルソースなしですけど、頑張って下さい(笑) UxPalette1.4 のソースは修正済みなので、参考になると思います。


 -- リソースのアクセスについて --


 リソースのオープン/クローズについてクドクド書いていましたが、実は「読み込み専用」でオープンすれば、単純にクローズ出来ることが分かりました。

 今までの処理:
  現在のカレントリソースを保存
  リソースフォークがオープンしているか調べる
  新しいリソースフォークをオープン
  リソースにアクセス
  オープンしていたら保存してあったリソースを UseResFile
  そうでなければ現在のリソースを CloseResFile

 新しい処理:
  リソースフォークを読み込み専用でオープン
  リソースにアクセス(読むだけ)
  現在のリソースを CloseResFile

 いやはや簡単でした。読むだけならこれでOKです。今までの苦労はなんだったんだ(笑)

 読み込み専用でオープンするには OpenResFile の代わりに OpenRFPerm を使います。この関数はリソースフォークを開くときに「読み込み専用」とか「読み書き」とかのモードを指定することが出来ます。「読み書き」で使うと OpenResFile と大差ありませんが、返ってくるエラーコードが少し異なるので、それなりに使えることもあるでしょう。

 OpenRFPerm は UxGetFileIcon 1.3 で使っているので参考にして下さい。ちなみにこの手が使えるのはリソースを「読むだけ」の時だけです。書き込みも行いたい場合はやはりオープン状態を調べ、閉じる時に UseResFile と CloseResFile を使い分ける必要があるでしょう。


inserted by FC2 system
Next



THINK C Lab.

UDI's HomePage