[適用] ボタンの処理

プロパティ シートには、標準のダイアログ ボックスが備えていない機能があります。これらを使用すると、ユーザーがプロパティ シートを閉じる前に行った変更を適用できます。 これは、[適用] ボタンを使用して行います。 この記事では、この機能を適切に実装するために使用できる方法について説明します。

モーダル ダイアログ ボックスでは、通常、ユーザーが [OK] をクリックしてダイアログ ボックスを閉じたときに、外部オブジェクトに設定が適用されます。 プロパティ シートも同様です。ユーザーが [OK] をクリックすると、プロパティ シートの新しい設定が有効になります。

ただし、ユーザーがプロパティ シートのダイアログ ボックスを閉じることなく設定を保存できるようにすることが必要な場合があります。 これは、[適用] ボタンの機能です。 [適用] ボタンは、現在アクティブなページの現在の設定のみを適用するのではなく、すべてのプロパティ ページの現在の設定を外部オブジェクトに適用します。

既定では、[適用] ボタンは常に無効になっています。 適切なときに [適用] ボタンを有効にするコードを記述する必要があります。また、以下で説明する [適用] の効果を実装するコードを記述する必要があります。

ユーザーに [適用] 機能を提供しない場合に、[適用] ボタンを削除する必要はありません。 それを無効のままにすることができます。これは、今後のバージョンの Windows で利用可能なプロパティ シートの標準サポートを使用するアプリケーションでは一般的になります。

ページが変更されているとレポートし、[適用] ボタンを有効にするには、CPropertyPage::SetModified( TRUE ) を呼び出します。 変更されているとレポートされたページがある場合、[適用] ボタンは、現在アクティブなページが変更されたかどうかに関係なく有効なままになります。

ユーザーがページ内の設定を変更するたびに、CPropertyPage::SetModified を呼び出す必要があります。 ユーザーがページ内の設定を変更したときを検出する方法の 1 つは、EN_CHANGEBN_CLICKED など、プロパティ ページ内にある各コントロールの変更通知ハンドラーを実装することです。

[適用] ボタンの効果を実装するには、プロパティ シートからその所有者、つまりアプリケーション内の他の外部オブジェクトにプロパティ ページの現在の設定を適用するよう指示する必要があります。 同時に、外部オブジェクトに変更を適用したすべてのページに対して CPropertyPage::SetModified( FALSE ) を呼び出して、プロパティ シートの [適用] ボタンを無効にする必要があります。

このプロセスの例については、MFC の標準サンプル PROPDLG を参照してください。

関連項目

プロパティ シート