MFC:您可以在 CDateTimeCtrl 中更改旋转的加速度吗?
MFC: Can you change the acceleration of the spin in a CDateTimeCtrl?
我正在使用 VS-2015,我正在尝试扩展 CDateTimeCtrl
以检测它何时超过 59' 并相应地更改小时。
现在的问题是,当我按住箭头递增或递减时,它会加速,我无法再检查它是否从 59 变为 00,反之亦然,因为递增或递减超过 1' 你可以从 50 到 10。
我知道 CEdit
+ CSpinButtonCtrl
但我想知道是否可以将加速度改为一分钟一秒。
您可以使用 class GetDateTimePickerInfo()
成员函数检索包含 'spin button' 的 CDateTimeCtrl
对象的句柄,该函数将在 hwndUD
成员中返回的 DATETIMEPICKERINFO
结构。
然后您可以通过向它发送 UDM_SETACCEL
message, with wParam
set to 1
and lParam
pointing to a 1-element array of UDACCEL
结构来有效地禁用该旋转控件的加速;将该结构元素的加速时间 (nSec
) 设置为一个非常大的值,并且(只是为了确定)将加速增量值 (nInc
) 设置为 'remain' 在 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
来完全禁用加速函数(和 NULL
for `lParam)但这不是记录的功能。 (值得一试吗?)
我正在使用 VS-2015,我正在尝试扩展 CDateTimeCtrl
以检测它何时超过 59' 并相应地更改小时。
现在的问题是,当我按住箭头递增或递减时,它会加速,我无法再检查它是否从 59 变为 00,反之亦然,因为递增或递减超过 1' 你可以从 50 到 10。
我知道 CEdit
+ CSpinButtonCtrl
但我想知道是否可以将加速度改为一分钟一秒。
您可以使用 class GetDateTimePickerInfo()
成员函数检索包含 'spin button' 的 CDateTimeCtrl
对象的句柄,该函数将在 hwndUD
成员中返回的 DATETIMEPICKERINFO
结构。
然后您可以通过向它发送 UDM_SETACCEL
message, with wParam
set to 1
and lParam
pointing to a 1-element array of UDACCEL
结构来有效地禁用该旋转控件的加速;将该结构元素的加速时间 (nSec
) 设置为一个非常大的值,并且(只是为了确定)将加速增量值 (nInc
) 设置为 'remain' 在 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
来完全禁用加速函数(和 NULL
for `lParam)但这不是记录的功能。 (值得一试吗?)