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

Technical Q&A QA1214
Are the root control, the root view, and the content view the same entity?


Q: ルートコントロール、ルートビュー、コンテンツビューは、同じエンティティなのでしょうか?

A: まったく違います。

ルートビューは HIViewGetRoot によって返されます。これは 10.2 以降にのみ存在します。ルートビューはウインドウ内の最上位のビューであり、ウインドウの全体的な構造となる領域を表します。kWindowCompositingAttribute がウインドウに設定されているかどうかにかかわらず、すべてのウインドウにルートビューがあります。

コンテンツビューは、HIViewFindByIDkHIViewWindowContentID の組み合わせによって返されるもので、10.2 以降にのみ存在します。ウインドウのルートビューの子であり、合成モードでのみ意味をなすような方法でウインドウのコンテンツ領域を表します。ウインドウに kWindowCompositingAttribute が設定されているかどうかにかかわらず、すべてのウインドウにコンテンツビューがあります(プレーンウインドウやシンプルウインドウなど、一時的な例外はいくつかあります)。kWindowCompositingAttribute が設定されてない場合は、ウインドウのコンテンツビュー内にビューまたはコントロールを組み込もうとしないでください。この操作はサポートされておらず、問題を引き起こす原因にもなります。

ルートコントロールは GetRootControl によって返されます。ルートコントロールはルートビューとは異なります。その詳細は、ウインドウに kWindowCompositingAttribute が設定されているかどうかによって変わります:

kWindowCompositingAttribute が設定されていない場合、ルートコントロールは、非合成モードでのみ意味をなす手法でウインドウのコンテンツ領域を表します。10.2 ではウインドウのコンテンツビューの子になります。10.2 よりも前のバージョンでは、親ビューを持たず、内部の仕組みを通してウインドウと関連付けられます。ウインドウが CreateRootControl により明示的に作成される場合や、有効な WindowRef を使用して CreateFooControl API を呼び出すことによって暗黙のうちに作成される場合には、ウインドウはルートコントロールを持つにすぎません。

kWindowCompositingAttribute が設定されている場合、実際にはルートコントロールはありません。代わりに、GetRootControl API はウインドウのコンテンツビューを返しますが、これは開発者にとっての便宜上のものです。


[2002 年 11 月 12 日]