モードレス プロパティ シートの作成

通常、作成するプロパティ シートはモーダルです。 モーダル プロパティ シートを使用した場合、ユーザーがアプリケーションの他の部分を使用するには、その前にプロパティ シートを閉じる必要があります。 この記事では、ユーザーがアプリケーションの他の部分を使用している間もプロパティ シートを開いたままにできるモードレス プロパティ シートを作成するための方法について説明します。

プロパティ シートをモーダル ダイアログ ボックスではなくモードレス ダイアログ ボックスとして表示するには、DoModal ではなく CPropertySheet::Create を呼び出します。 さらに、モードレス プロパティ シートをサポートするために、いくつかの追加のタスクも実装する必要があります。

追加のタスクの 1 つは、プロパティ シートと、プロパティ シートが開いているときに変更する外部オブジェクトとの間でデータを交換することです。 これは、通常、標準のモードレス ダイアログ ボックスの場合と同じタスクです。 このタスクの一部は、モードレス プロパティ シートとプロパティ設定が適用される外部オブジェクトとの間の通信チャネルを実装することです。 この実装は、モードレス プロパティ シートで CPropertySheet からクラスを派生させると簡単になります。 この記事では、これが行われていることを前提にしています。

モードレス プロパティ シートと外部オブジェクト (ビュー内の現在の選択項目など) の間で通信する方法の 1 つは、プロパティ シートから外部オブジェクトを指すポインターを定義する方法です。 CPropertySheet の派生クラスで関数 (たとえば、SetMyExternalObject) を定義して、フォーカスが 1 つの外部オブジェクトから別のオブジェクトに変わるたびにポインターを変更するようにします。 SetMyExternalObject 関数は、新しく選択された外部オブジェクトを反映するために、各プロパティ ページの設定をリセットする必要があります。 これを実現するには、SetMyExternalObject 関数が CPropertySheet クラスに属する CPropertyPage オブジェクトにアクセスできる必要があります。

プロパティ シート内のプロパティ ページへのアクセスを提供する最も便利な方法は、CPropertyPage オブジェクトを CPropertySheet の派生オブジェクトに埋め込むことです。 CPropertySheet の派生オブジェクトへの CPropertyPage オブジェクトの埋め込みは、プロパティ シートの所有者が CPropertyPage オブジェクトを作成し、CPropertySheet::AddPage を介してプロパティ シートに渡すというモーダル ダイアログ ボックスの一般的なデザインとは異なります。

モードレス プロパティ シートの設定を外部オブジェクトにいつ適用するかを決定する方法については、ユーザー インターフェイスを使用した多くの代替手段があります。 代替手段の 1 つとして、ユーザーが値を変更するたびに、現在のプロパティ ページの設定を適用する方法があります。 別の方法として、ユーザーが外部オブジェクトにコミットする前にプロパティ ページに変更を蓄積することを可能にする [適用] ボタンを提供することです。 [適用] ボタンを処理する方法については、「[適用] ボタンの処理」を参照してください。

関連項目

プロパティ シート
データの交換
MFC でのダイアログ ボックスの操作