構成変更の通知
Quartz Display Services は、ディスプレイ構成変更について知る必要があるアプリケーションに、一般的な通知メカニズムを提供します。どのアプリケーションでも、ディスプレイの再構成呼び出し関数を登録できます。再構成中のいくつかの時点で、Quartz は呼び出し関数にディスプレイ ID、ステータスフラグ、およびオプションの private データを渡します。たとえば、ディスプレイモードの変更中に、呼び出し関数を使用して、新しいモードを説明するログメッセージを印刷することができます。
Quartz は以下の場合に呼び出し関数を呼び出します。
- あなたのアプリケーションがローカルディスプレイを再構成する関数を呼び出す時
- あなたのアプリケーションがイベント処理スレッド内のイベントを注目していて、別のアプリケーションがローカルディスプレイを再構成する関数を呼び出している時
- ユーザーが、ディスプレイのハードウェア構成を変更しーたとえば、ディスプレイを切断したり、システム環境設定を変更した時
ディスプレイの再構成の前に、Quartz はオンラインディスプレイごとに呼び出し関数を 1 回ずつ呼び出して、保留中の構成変更を示します。kCGDisplayBeginConfigurationFlag フラグは常に設定されます。ディスプレイの再構成の後、Quartz は追加、削除、およびオンラインディスプレイごとに呼び出し関数を 1 回ずつ呼び出します。フラグは、ディスプレイ構成がどのように変更されたかを示します。
Cocoa は既にこの通知メカニズムを使用して、ディスプレイの再構成に応答します。その結果、ユーザーやアプリケーションがディスプレイモードを変更したり、ミラーリングをオンにしたり、ディスプレイを切断したりすると、Cocoa アプリケーションはウィンドウの位置を変えたりサイズを変更したりするのに関与する必要はありません。アプリケーションフレームワークはこのタスクを自動的に処理します。
構成の変更の通知を受け取りたい場合は、以下の手順を簡単に説明します。
- 通知呼び出し関数を登録します。
- あなたの関数が呼び出されたら、アクションが必要かどうかを調べるためにパラメータをチェックしてください。例えば:
- 通知が不要になったら、呼び出し関数登録を削除します。
CGDisplayRegisterReconfigurationCallback (MyDisplayReconfigurationCallBack, &userInfo);
void MyDisplayReconfigurationCallBack ( CGDirectDisplayID display, CGDisplayChangeSummaryFlags flags, void *userInfo) { if (flags & kCGDisplaySetModeFlag) { /* handle mode change for this display */ } }
CGDisplayRemoveReconfigurationCallback (MyDisplayReconfigurationCallBack, &userInfo);