Estou tentando obter um valor de controle de rotação através da WM_VSCROLL
mensagem, mas há algo incomum acontecendo, o código é implementado duas vezes ao clicar uma vez no controle de rotação.
case WM_VSCROLL:
{
switch (GetDlgCtrlID((HWND)lParam)) {
case JOB_SPIN:
{
UINT spin_pos = SendDlgItemMessage(hDlg, JOB_SPIN, UDM_GETPOS32, 0, 0);
OutputDebugString(Mem->ToString(spin_pos).c_str()); // Mem->ToString, to convert a number to a string
}
}
return TRUE;
}
Ao tentar examinar o WParam
valor de cada mensagem, descobri que há uma diferença:
O que há de errado com meu código ou há algo faltando?
O problema é que você simplesmente não está olhando as mensagens
wParam
para determinar por que cada mensagem está sendo enviada para você.Pela
WM_VSCROLL
documentação :Então, no seu caso:
wParam
está196612
(0x30004
),LOWORD(wParam)
está4
(SB_THUMBPOSITION
), significando que o usuário rolou a barra de rolagem.HIWORD(wParam)
contém a nova posição de rolagem3
.wParam
está196616
(0x30008
),LOWORD(wParam)
está8
(SB_ENDSCROLL
), significando que o usuário terminou a rolagem. Ignore o que está dentroHIWORD(wParam)
.Basta atualizar o seu
switch
para levarwParam
em consideração, por exemplo: