最近在学习SDK编程中使用到了Up_Down控件,在获取当前位置时提到的数据会超出边界,查看资料后发现使用WM_NOTIFY的消息,处理UDN_DELTAPOS的通知,lParam是一个结构:NMUPDOWN,通过这个结构来更新Edit box,因为这个通知不等操作结束就已经发出,所以数据会越界。只能在更新时候将当时位置加上变化量,最后获得正常的数值。代码如下:
case WM_NOTIFY:
{
LPNMUPDOWN lpnmud = (LPNMUPDOWN)lParam;
switch (lpnmud->hdr.code)
{
case UDN_DELTAPOS: //数值变化的消息
{
WORD pos = 1;
UINT32 range; //获取数值范围
switch (lpnmud->hdr.idFrom)
{
case IDC_UPDOWN_1:
{
range = SendMessageW(hwndUpDnCtl, UDM_GETRANGE, NULL, NULL);
int h = LOWORD(range);
int l = HIWORD(range);
if (lpnmud->iPos == l) //如果是最小值时
{
if (lpnmud->iDelta > 0) //判断方向,>0是向上
pos = lpnmud->iPos + lpnmud->iDelta; //当前值加上增加量
else
pos = l; //向下时不变
}
else if (lpnmud->iPos == h) //最大值时
{
if (lpnmud->iDelta < 0) //向下就减少
pos = lpnmud->iPos + lpnmud->iDelta;
else
pos = h;
}
else //中间值时的操作
{
pos = lpnmud->iPos + lpnmud->iDelta;
}
//StringCbPrintfW(pstr, 255, _T("POS=%d"),pos);
//MessageBoxW(hWnd, _T("你点击了1"), _T("通知"), MB_OK);
}
break;