イベントのフリーズ
コンテナーは、IOleControl::FreezeEvents を TRUE で呼び出すことによって、イベントに応答する準備ができていないことをコントロールに通知できます。 FALSE で FreezeEvents を呼び出すことで、凍結を解除できます。 コンテナーがイベントをフリーズすると、イベントの受信ではなく、イベントの処理がフリーズします。つまり、イベントが凍結されている間もコンテナーはイベントを受信できます。 イベントが凍結されている間にコンテナーがイベント通知を受信した場合、コンテナーはイベントを無視する必要があります。 他のアクションは適切ではありません。
イベントが見逃されないことがコントロールにとって重要な場合、コントロールは、コンテナーの FreezeEvents と TRUE の呼び出しを書き留める必要があります。 コンテナーのイベント処理が停止している間、コントロールは次のいずれかの手法を実装する必要があります。
- コンテナーがアクションを実行しないことを十分に承知した上で、イベントを発生させます。
- コントロールが発生させるすべてのイベントを破棄します。
- コンテナーが FALSE で FreezeEvents を呼び出した後で、保留中のすべてのイベントをキューに登録します。
- 関連するイベントまたは重要なイベントのみをキューに登録し、コンテナーが FALSE で FreezeEvents を呼び出した後に起動します。
各テクニックはさまざまな状況で受け入れられ、適切です。 コントロールの開発者は、コントロールの機能に適切な手法を決定して実装する責任があります。