Langkah 7. Menangani Pesan Jendela
[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]
Ambil alih metode CBasePropertyPage::OnReceiveMessage untuk memperbarui kontrol dialog sebagai respons terhadap input pengguna. Jika Anda tidak menangani pesan tertentu, panggil metode OnReceiveMessage pada kelas induk. Setiap kali pengguna mengubah properti, lakukan hal berikut:
- Atur variabel m_bDirty halaman properti ke TRUE.
- Panggil metode IPropertyPageSite::OnStatusChange dari bingkai properti dengan bendera PROPPAGESTATUS_DIRTY. Bendera ini menginformasikan bingkai properti bahwa ia harus mengaktifkan tombol Terapkan . Anggota CBasePropertyPage::m_pPageSite memegang pointer ke antarmuka IPropertyPageSite .
Untuk menyederhanakan langkah ini, Anda bisa menambahkan fungsi pembantu berikut ke halaman properti Anda:
private:
void SetDirty()
{
m_bDirty = TRUE;
if (m_pPageSite)
{
m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);
}
}
Panggil metode privat ini di dalam OnReceiveMessage setiap kali tindakan pengguna mengubah properti, seperti yang ditunjukkan dalam contoh berikut:
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);
}
Halaman properti dalam contoh ini memiliki dua kontrol, bilah penggeler, dan tombol Kembali ke Default . Jika pengguna menggulir bilah penggeser, halaman properti mengatur nilai saturasi pada filter. Jika pengguna mengklik tombol , halaman properti memulihkan nilai saturasi default filter. Dalam setiap kasus, m_lNewVal menyimpan nilai saat ini dan m_lVal menyimpan nilai asli. Nilai m_lVal tidak diperbarui sampai pengguna melakukan perubahan, yang terjadi ketika pengguna mengklik tombol OK atau Terapkan pada bingkai properti.
Berikutnya: Langkah 8. Terapkan Perubahan Properti.
Topik terkait