Q:
ウインドウのルートコントロールに組み込むカスタム HIView を書きましたが、Carbon の kEventControlDraw イベントを受け取ったときに CGContext パラメタを取得できず、結果として何も描画できません。何が起きているのでしょうか?
A:
カスタム HIView を非合成ウインドウに組み込もうとしていることが考えられます。この場合は、Carbon の kEventControlDraw イベントを受け取ったときに CGContext パラメタを取得することができないからです。
ウインドウは、合成モードか非合成モードのどちらかになります。CreateNewWindow への第 2 パラメタとして渡す他のウインドウ属性に kWindowCompositingAttribute 属性を追加することにより合成ウインドウが得られます。
• ウインドウが合成モードの場合、HIView はウインドウのコンテンツビュー(HIViewFindByID と kHIViewWindowContentID)に追加する必要があります。その後、kEventControlDraw Carbon イベントのパラメタとして、描画先の CGContext を取得します。
• ウインドウが合成モードでない場合は、コントロールをウインドウのルートコントロール(GetRootControl)に追加する必要があります。その後、kEventControlDraw Carbon イベントのパラメタとして、描画先の QuickDraw GrafPort を取得します。
その他の組み合わせ(合成ウインドウのルートコントロールへの組み込み、非合成ウインドウのコンテンツビューへの組み込み)は必ずしもサポートされておらず、現在または将来においても、動作しない可能性があります。
合成がオフの場合、ウインドウのルートコントロールはそのウインドウのコンテンツビューと同じエンティティではありません。
合成がオンの場合、(開発者に対する便宜上)それらは同じエンティティです。
[2002 年 11 月 12 日]
|