我试图通过WM_VSCROLL
消息获取旋转控制值,但是发生了一些不寻常的事情,代码在单击旋转控件一次时实现了两次。
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;
}
当尝试检查WParam
每条消息的值时,我发现存在差异:
我的代码有什么问题或者缺少什么东西?
问题在于您根本没有查看消息
wParam
来确定每条消息发送给您的原因。根据
WM_VSCROLL
文档:所以,就你而言:
wParam
is196612
(0x30004
),LOWORD(wParam)
is4
(SB_THUMBPOSITION
),表示用户已经滚动了滚动条。HIWORD(wParam)
包含新的滚动位置3
。wParam
is196616
(0x30008
),LOWORD(wParam)
is8
(SB_ENDSCROLL
),表示用户已完成滚动。忽略 中的内容HIWORD(wParam)
。只需更新您的
switch
考虑即可wParam
,例如: