win32 UP_DOWN控件获取POS的一个小问题

最近在学习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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值