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

Technical Q&A QA1215
Do I have to call CreateRootControl after creating my window?


Q: ウインドウ作成後、CreateRootControl を呼び出す必要はありますか?

A: 実行しているシステムと、ウインドウで何を行うかによって異なります。

Mac OS 8.x およびそれ以降の Mac OS 9.x で High Level Toolbox が新しくなったことにより、組み込みコントロール(タブ、グループなど)や、リストボックスまたはデータブラウザなどの特定のコントロールを使用する場合は、CreateRootControl を使用してルートコントロールを作成する必要が生じました。

Mac OS X 10.0 および 10.1 の登場により、ルートコントロールはウインドウ内で 1 つ目のコントロールが作成された直後に High Level Toolbox によって自動的に作成されるようになったため、ルートコントロールを作成する必要はなくなりました。ソースコードでは、ウインドウ作成後も CreateRootControl の呼び出しを残しておいても構いません。CreateRootControl はもう使われなくなりましたが、残しておいても害はないためです。

Mac OS X 10.2 では、この API が再び問題となっています。

合成ウインドウ (kWindowCompositingAttribute) を作成する場合は、おそらく、ウインドウのコンテンツビューにコントロール(もっと厳密に言うと HIView)を組み込むことになり、その場合はルートコントロールを持つ必要はないので、CreateRootControl を呼び出す必要もありません。

非合成ウインドウを作成して、組み込みコントロール(タブ、グループなど)や、リストボックスまたはデータブラウザなどの特定のコントロールを使用する場合は、依然としてルートコントロールが必要です。CreateFooControl API を使用してウインドウにコントロールを作成し、有効なウインドウのパラメタを渡せば、これまでのようにルートコントロールが自動的に作成されるため、自分自身で CreateRootControl を呼び出す必要はありません。しかし、別の方法でコントロールを作成する場合、すなわち、コントロールを後で組み込むためにウインドウパラメタとして NULL を渡す場合は、CreateRootControl を呼び出してルートコントロールにコントロール階層を組み込むときには十分注意してください。コントロール階層を、HIViewFindByIDkHIViewWindowContentID によって返されるコンテンツビューに組み込もうとしないでください。なぜなら、コンテンツビューへのコントロール階層の組み込み込みはサポートされておらず、現在または将来においても動作しない可能性があります。

合成がオフの場合、ウインドウのルートコントロールはそのウインドウのコンテンツビューと同じエンティティではありません。
合成がオンの場合、ウインドウのルートコントロールとそのウインドウのコンテンツビューとは、(開発者の便宜上)同じのエンティティです。


[2002 年 11 月 12 日]