MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?

MFC: Can you change the acceleration of the spin in a CDateTimeCtrl?

本文关键字:加速度 改变 CDateTimeCtrl MFC      更新时间:2023-10-16

我正在使用VS-2015,我正在尝试扩展CDateTimeCtrl以检测它何时超过59'并相应地更改小时。

现在的问题是,当我按住箭头递增或递减时,它会加速,我无法再检查它是否从 59 更改为 00,反之亦然,因为增加或减少超过 1' 你可以从 50 到 10。

我知道CEdit+CSpinButtonCtrl但我想知道是否可以将加速度更改为仅一分钟。

您可以使用类GetDateTimePickerInfo()成员函数检索CDateTimeCtrl对象包含的"旋转按钮"的句柄,该函数将位于返回的DATETIMEPICKERINFO结构的hwndUD成员中。

然后,您可以通过向该旋转控制发送UDM_SETACCEL消息来有效地禁用该旋转控制的加速,wParam设置为1lParam指向UDACCEL结构的 1 元素数组;将该结构元素的加速时间 (nSec( 设置为一个非常大的值,并且(只是为了确定(将加速增量值 (nInc( 设置为 "keep" at 1:

CDateTimeCtrl MyDTC;
///...
DATETIMEPICKERINFO dtInfo{};
MyDTC.GetDateTimePickerInfo(&dtInfo);
UDACCEL AccelList[1] = { {UINT_MAX, 1} };
::SendMessage(dtInfo.hwndUD, UDM_SETACCEL, 1, reinterpret_cast<LPARAM>(AccelList));

如果 ~8,166 年(UINT_MAX秒(的时间太短,您可以在列表中添加更多(相同(UDACCEL结构。

请注意,您不能简单地通过将0作为wParam参数传递给SetAccel函数(以及lParamNULL(来完全禁用加速。这没有记录,如果您尝试这样做,UDM_SETACCEL消息(以及 MFC 包装器函数,SetAccel(将返回FALSE,指示错误。