[適用] ボタンの処理
更新 : 2007 年 11 月
プロパティ シートには、標準ダイアログ ボックスにはない機能があります。プロパティ シートでは、ユーザーはプロパティ シートを閉じる前に変更を適用できます。この機能は、[適用] ボタンによって実現されます。ここでは、この機能を適切に実装する方法を説明します。
モーダル ダイアログ ボックスの場合、通常は、[OK] がクリックされてダイアログ ボックスが閉じると、外部オブジェクトに設定内容が適用されます。この動作は、プロパティ シートの場合も同じです。ユーザーが [OK] をクリックすると、プロパティ シートの新しい設定値が有効になります。
しかし、プロパティ シート ダイアログ ボックスを閉じずに設定値を保存できるようにした方がよい場合もあります。そのような機能は、[適用] ボタンで実現できます。[適用] ボタンをクリックすると、現在アクティブになっているページの現在の設定値だけでなく、すべてのプロパティ ページの現在の設定値が外部オブジェクトに適用されます。
既定では、[適用] ボタンは常に使用不能です。以下に説明するように、適切なときに [適用] ボタンを有効にするためのコード、および [適用] ボタンに機能を実装するコードを記述する必要があります。
[適用] ボタンの機能が必要でない場合でも、[適用] ボタンを削除する必要はありません。Windows の将来のバージョンで使用される標準のプロパティ シートでは、一般的な機能になります。そのため、このボタンは無効な状態で残しておいてかまいません。
ページの内容が変更されたことを通知して、[適用] ボタンを有効にするには、CPropertyPage::SetModified( TRUE ) を呼び出します。シート内のいずれかのページが変更された場合、現在のページの状態に関係なく、[適用] ボタンは選択可能になります。
ページの設定値がユーザーによって変更されるたびに、CPropertyPage::SetModified を呼び出す必要があります。ページの設定値がユーザーによって変更されたことを検出する 1 つの方法として、プロパティ ページのコントロールごとに変更通知ハンドラ (EN_CHANGE や BN_CLICKED など) を実装する方法があります。
[適用] ボタンの操作を反映するには、プロパティ シートからそのオーナー (またはアプリケーションのほかの外部オブジェクト) に対して、プロパティ ページの現在の設定値を適用するように通知する必要があります。同時に、[適用] ボタンを無効にするために、変更内容が外部オブジェクトに適用されるすべてのページに対して CPropertyPage::SetModified( FALSE ) を呼び出します。
このプロセスの例については、MFC の「標準のサンプル」の PROPDLG を参照してください。