高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1115
Current GDevice Dependencies


Q:私のアプリケーションは、奇妙な描画動作をします。間違ったウィンドウに描画したり、まったく描画しなかったりします。何が原因と考えられますか?

A:多くの Mac OS API は、現在の GrafPort の設定に基づいて動作することはよく知られています。一方あまり知られていないのは、多くの呼び出しが現在の GDevice からも情報を集めており、これがいくつかの問題の原因かもしれません。

特に、CreateNewPort、NewDialog などの呼び出しを使ってウィンドウやポートを作成するときは、現在の GDevice が主デバイスに設定されていることを事前に確認してください。 現在の GDevice と GrafPort を主デバイス以外に設定したままにする可能性がある SetGWorld への呼び出しには注意します。

これらはすべて、Mac OS 9 と Mac OS X の両方に該当しますが、Mac OS X の場合にはもう 1 つ問題があります。Mac OS X では、現在の GDevice と GrafPort がスレッドごとに保存されるので、2 重に注意する必要があります。

Mac OS X における QuickDraw 関連のクラッシュのほとんどは、現在のポートが無効だったことが原因だと経験上わかっています。たとえば、現在のポートが、割り当てが解除されている GWorld をまだ参照していたり、すべての SetPort の呼び出しを、現在のポートを保存し復元する処理で囲むという、実績ある習慣が無効なポートを予想以上に長い間保たせたりする可能性があることは見落としがちです。


[2002 年 2 月 13 日]