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

Technical Q&A QA1212
CGContext parameter missing in my kEventControlDraw event


Q: ウインドウのルートコントロールに組み込むカスタム HIView を書きましたが、Carbon の kEventControlDraw イベントを受け取ったときに CGContext パラメタを取得できず、結果として何も描画できません。何が起きているのでしょうか?

A: カスタム HIView を非合成ウインドウに組み込もうとしていることが考えられます。この場合は、Carbon の kEventControlDraw イベントを受け取ったときに CGContext パラメタを取得することができないからです。

ウインドウは、合成モードか非合成モードのどちらかになります。CreateNewWindow への第 2 パラメタとして渡す他のウインドウ属性に kWindowCompositingAttribute 属性を追加することにより合成ウインドウが得られます。

• ウインドウが合成モードの場合、HIView はウインドウのコンテンツビュー(HIViewFindByIDkHIViewWindowContentID)に追加する必要があります。その後、kEventControlDraw Carbon イベントのパラメタとして、描画先の CGContext を取得します。

• ウインドウが合成モードでない場合は、コントロールをウインドウのルートコントロール(GetRootControl)に追加する必要があります。その後、kEventControlDraw Carbon イベントのパラメタとして、描画先の QuickDraw GrafPort を取得します。

その他の組み合わせ(合成ウインドウのルートコントロールへの組み込み、非合成ウインドウのコンテンツビューへの組み込み)は必ずしもサポートされておらず、現在または将来においても、動作しない可能性があります。

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


[2002 年 11 月 12 日]