Share via


CEchoPropPage::Apply の実装

[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能な場合は SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

CEchoPropPage::Apply メソッドは EchoPropPage.cpp に実装されています。 ユーザーがWindows メディア プレーヤーの [プロパティ ページ] ダイアログ ボックスで [適用] をクリックすると実行されます。 プラグイン ウィザードのサンプル コードは、1 つのプロパティを処理する実装を提供します。 Echo サンプル プロパティの 1 つに対してこのコードを変更し、もう一方のプロパティ値を格納するコードを追加できます。

Apply メソッド変数の宣言

最初に、fScaleFactor の宣言を削除する必要があります。 次に、必要な変数宣言を追加します。 次の例は、完成した変数宣言を示しています。

TCHAR   szStr[MAXSTRING] = { 0 };
DWORD   dwDelayTime = 1000;  // Initialize the delay time.
DWORD   dwWetmix = 50;       // Initialize a DWORD for effect level.
double  fWetmix = 0.50;      // Initialize a double for effect level.

プロパティ ページからの値の取得

ユーザー入力を取得して検証するコードを実装する必要があります。 次のコード例では、IDC_DELAYTIME編集ボックスから遅延時間の値を取得し、その値が指定した範囲内にあることを確認します。

// Get the delay time value from the dialog box.
GetDlgItemText(IDC_DELAYTIME, szStr, sizeof(szStr) / sizeof(szStr[0]));

dwDelayTime = atoi(szStr);

// Make sure delay time is valid.
if ((dwDelayTime < 10) || (dwDelayTime > 2000))
{
    if (::LoadString(_Module.GetResourceInstance(), IDS_DELAYRANGEERROR, szStr, sizeof(szStr) / sizeof(szStr[0])))
    {
        MessageBox(szStr);
    }

    return E_FAIL;
}

ユーザー入力が指定された範囲にない場合は、メッセージ ボックスが表示されます。 エラー メッセージに先ほど作成した文字列リソースが使用されていることに注意してください。

次の例では、IDC_WETMIX編集ボックスから効果レベルを取得し、値が指定された範囲内にあることを確認します。

// Get the effects level value from the dialog box.
GetDlgItemText(IDC_WETMIX, szStr, sizeof(szStr) / sizeof(szStr[0]));

dwWetmix = atoi(szStr);

// Make sure wet mix value is valid.
if ((dwWetmix < 0) || (dwWetmix > 100))
{
    if (::LoadString(_Module.GetResourceInstance(), IDS_MIXRANGEERROR, szStr, sizeof(szStr) / sizeof(szStr[0])))
    {
        MessageBox(szStr);
    }

    return E_FAIL;
}

レジストリにプロパティ値を格納する

次に、新しいプロパティ値をレジストリに保持する必要があります。 次のコードは、両方のプロパティ値を格納します。

// update the registry
CRegKey key;
LONG    lResult;

// Write the delay time value to the registry.
lResult = key.Create(HKEY_CURRENT_USER, kszPrefsRegKey);
if (ERROR_SUCCESS == lResult)
{
    lResult = key.SetValue( dwDelayTime , kszPrefsDelayTime );
}

// Write the wet mix value to the registry.
lResult = key.Create(HKEY_CURRENT_USER, kszPrefsRegKey);
if (ERROR_SUCCESS == lResult)
{
    lResult = key.SetValue( dwWetmix , kszPrefsWetmix );
}

エコー プラグインプロパティ値の更新

Apply メソッドは、プロパティ値が変更されたことを Echo プラグインに通知する必要があります。 次のコードでは、CEchoPropPage::SetObjects で取得されたインターフェイス ポインターを使用して、各プロパティのプロパティ put メソッドを呼び出します。

// update the plug-in
if (m_spEcho)
{
    m_spEcho->put_delay(dwDelayTime);

    // Convert the wet mix value from DWORD to double.
    fWetmix = (double)dwWetmix / 100;
    m_spEcho->put_wetmix(fWetmix);
}

ウェット ミックス値は、プラグインに渡される前に浮動小数点に変換されることに注意してください。

[適用] ボタンを無効にする

最後の手順として、値が正常に更新されたことをユーザーに通知するために、コードで [プロパティ ページ] ダイアログ ボックスの [適用] を無効にする必要があります。 これには、次の 1 行のコードが必要です。

m_bDirty = FALSE; // Tell the property page to disable Apply.

Echo Sample プロパティ ページの変更