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)但这不是记录的功能。 (值得一试吗?)