次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

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

プロパティ シート内のプロパティ ページに最も簡単にアクセスするには、CPropertySheet の派生オブジェクトに CPropertyPage オブジェクトを埋め込みます。CPropertySheet の派生オブジェクトに CPropertyPage オブジェクトを埋め込むことは、モーダル ダイアログ ボックスの通常のデザインとは異なります。通常のデザインでは、プロパティ シートのオーナーによって CPropertyPage オブジェクトが作成され、作成されたオブジェクトが CPropertySheet::AddPage を通じてプロパティ シートに渡されます。

モードレス プロパティ シートの設定値をいつ外部オブジェクトに適用するのかを決定するためのユーザー インターフェイスには、選択肢があります。そのうちの 1 つは、ユーザーが値を変更した時点で現在のプロパティ ページの設定値を適用することです。もう一方は、[適用] ボタンを用意することです。このボタンがあると、ユーザーはプロパティ ページで複数の設定値を変更してから、まとめてその変更を外部オブジェクトにコミットできます。[適用] ボタンの処理方法については、「[適用] ボタンの処理」を参照してください。

参照

概念

プロパティ シート (MFC)

ダイアログ ボックスの有効期間

参照

データの交換