Я проектирую диалоговое окно в редакторе ресурсов Visual Studio, и проблема в том, что я не знаю, как прослушивать сообщения, отправленные с помощью ползунка, под изображением находится диалоговая процедура.
Я знаю, что мне нужно прослушать сообщение WM_NOTIFY
, но я не знаю, какой код отправляет мне элемент управления ... Я добавил 2 комментария в WM_NOTIFY
части процедуры ниже, чтобы показать, в чем проблема ...
вот изображение, как я расположил это диалоговое окно:
А вот процедура диалогового окна:
INT_PTR CALLBACK SettingsSoundProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static MainWindow* main_win = nullptr;
switch (uMsg)
{
case WM_INITDIALOG:
{
main_win = reinterpret_cast<MainWindow*>(lParam);
SetWindowText(GetDlgItem(hDlg, IDC_VOLUME_LABEL), TEXT("Music"));
SendMessage(GetDlgItem(hDlg, IDC_VOLUME_SLIDER), TBM_SETRANGE, (WPARAM)FALSE, MAKELPARAM(0, 100));
SendMessage(GetDlgItem(hDlg, IDC_VOLUME_SLIDER), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)20);
return TRUE;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, 0);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, 0);
return TRUE;
default:
break;
}
case WM_NOTIFY:
{
LPNMHDR nmhdr = (LPNMHDR)lParam;
if (nmhdr->idFrom == IDC_VOLUME_SLIDER)
{
switch (nmhdr->code)
{
// what message do I listen for here?
case TB_THUMBTRACK:
case WM_HSCROLL:
case WM_VSCROLL:
case TRBN_THUMBPOSCHANGING:
case TB_PAGEUP:
case TB_PAGEDOWN:
case TB_THUMBPOSITION:
case TB_TOP:
case TB_BOTTOM:
case TB_ENDTRACK:
// this is never hit
MessageBox(nullptr, TEXT("Message"), TEXT("Info"), MB_OK);
break;
default:
// this is hit!
abort();
}
}
return TRUE;
}
case WM_DESTROY:
EndDialog(hDlg, 0);
return TRUE;
default:
break;
}
return FALSE;
}
Как вы можетесм. WM_HSCROLL
ни TRBN_THUMBPOSCHANGING
не ударили, какое сообщение мне нужно прослушать здесь?