通常、作成するプロパティ シートはモーダルになります。 モーダル プロパティ シートを使用する場合、ユーザーは、アプリケーションの他の部分を使用する前に、プロパティ シートを閉じる必要があります。 この記事では、ユーザーがアプリケーションの他の部分を使用しながらプロパティ シートを開いたままにするモードレス プロパティ シートを作成するために使用できるメソッドについて説明します。
プロパティ シートをモーダル ダイアログ ボックスとしてではなくモードレス ダイアログ ボックスとして表示するには、DoModal ではなく CPropertySheet::Create を呼び出します。 また、モードレス プロパティ シートをサポートするために、いくつかの追加タスクを実装する必要があります。
その他のタスクの 1 つは、プロパティ シートを開くときに変更する外部オブジェクトとプロパティ シートの間でデータを交換することです。 これは通常、標準のモードレス ダイアログ ボックスの場合と同じタスクです。 このタスクの一部は、モードレス プロパティ シートと、プロパティ設定が適用される外部オブジェクトとの間の通信チャネルを実装することです。 モードレス プロパティ シートの CPropertySheet からクラスを派生させる場合、この実装ははるかに簡単です。 この記事では、これを行ったことを前提としています。
モードレス プロパティ シートと外部オブジェクト (ビュー内の現在の選択など) の間で通信する方法の 1 つは、プロパティ シートから外部オブジェクトへのポインターを定義することです。 外部オブジェクト間でフォーカスが変化するたびにポインターを変更するために、SetMyExternalObject派生クラスで関数 (CPropertySheet のようなものと呼ばれます) を定義します。
SetMyExternalObject関数は、新しく選択した外部オブジェクトを反映するために、各プロパティ ページの設定をリセットする必要があります。 これを実現するには、SetMyExternalObject関数は、 クラスに属する CPropertySheet オブジェクトにアクセスできる必要があります。
プロパティ シート内のプロパティ ページへのアクセスを提供する最も便利な方法は、 CPropertyPage オブジェクトを CPropertySheet派生オブジェクトに埋め込むことです。
CPropertyPage派生オブジェクトにCPropertySheetオブジェクトを埋め込む方法は、モーダル ダイアログ ボックスの一般的なデザインとは異なります。プロパティ シートの所有者は、CPropertyPage オブジェクトを作成し、CPropertySheet::AddPage を使用してプロパティ シートに渡します。
モードレス プロパティ シートの設定を外部オブジェクトに適用するタイミングを決定するには、多くのユーザー インターフェイスの代替手段があります。 別の方法の 1 つは、ユーザーが値を変更するたびに、現在のプロパティ ページの設定を適用することです。 もう 1 つの方法は、[適用] ボタンを提供することです。これにより、ユーザーは変更を外部オブジェクトにコミットする前に、プロパティ ページに変更を蓄積できます。 [適用] ボタンを処理する方法については、適用ボタンの 処理に関する記事を参照してください。
こちらも参照ください
プロパティ シート を する
データの交換
MFC でのダイアログ ボックスの操作