手順 7. ウィンドウ メッセージの処理
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
CBasePropertyPage::OnReceiveMessage メソッドをオーバーライドして、ユーザー入力に応答してダイアログ コントロールを更新します。 特定のメッセージを処理しない場合は、親クラスの OnReceiveMessage メソッドを呼び出します。 ユーザーがプロパティを変更するたびに、次の操作を行います。
- プロパティ ページの m_bDirty 変数を TRUE に設定 します。
- プロパティ フレームの IPropertyPageSite::OnStatusChange メソッドを PROPPAGESTATUS_DIRTY フラグで呼び出します。 このフラグは、[ 適用 ] ボタンを有効にする必要があることをプロパティ フレームに通知します。 CBasePropertyPage::m_pPageSite メンバーは、IPropertyPageSite インターフェイスへのポインターを保持します。
この手順を簡略化するために、プロパティ ページに次のヘルパー関数を追加できます。
private:
void SetDirty()
{
m_bDirty = TRUE;
if (m_pPageSite)
{
m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
}
}
次の例に示すように、ユーザー アクションがプロパティを変更するたびに、 OnReceiveMessage 内でこのプライベート メソッドを呼び出します。
BOOL CGrayProp::OnReceiveMessage(HWND hwnd,
UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
if (LOWORD(wParam) == IDC_DEFAULT)
{
// User clicked the 'Revert to Default' button.
m_lNewVal = SATURATION_DEFAULT;
m_pGray->SetSaturation(m_lNewVal);
// Update the slider control.
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETPOS, 1,
m_lNewVal);
SetDirty();
return (LRESULT) 1;
}
break;
case WM_HSCROLL:
{
// User moved the slider.
switch(LOWORD(wParam))
{
case TB_PAGEDOWN:
case SB_THUMBTRACK:
case TB_PAGEUP:
m_lNewVal = SendDlgItemMessage(m_Dlg, IDC_SLIDER1,
TBM_GETPOS, 0, 0);
m_pGray->SetSaturation(m_lNewVal);
SetDirty();
}
return (LRESULT) 1;
}
} // Switch.
// Let the parent class handle the message.
return CBasePropertyPage::OnReceiveMessage(hwnd,uMsg,wParam,lParam);
}
この例のプロパティ ページには、スライダー バーと [既定値に戻す ] ボタンの 2 つのコントロールがあります。 ユーザーがスライダー バーをスクロールすると、プロパティ ページによってフィルターの彩度の値が設定されます。 ユーザーがボタンをクリックすると、プロパティ ページによってフィルターの既定の彩度値が復元されます。 いずれの場合も、m_lNewValは現在の値を保持し、m_lValは元の値を保持します。 m_lValの値は、ユーザーが変更をコミットするまで更新されません。これは、ユーザーがプロパティ フレームの [OK] または [ 適用 ] ボタンをクリックしたときに発生します。
次へ: 手順 8.プロパティの変更を適用します。
関連トピック