【问题标题】:MFC: Can you change the acceleration of the spin in a CDateTimeCtrl?MFC:你能在 CDateTimeCtrl 中改变旋转的加速度吗?
【发布时间】:2020-06-11 16:42:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ visual-c++ datepicker mfc


    【解决方案1】:

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

    然后,您可以通过向其发送UDM_SETACCEL 消息来有效地禁用该旋转控件的加速,其中wParam 设置为1lParam 指向UDACCEL 结构的单元素数组;将该结构元素的加速时间 (nSec) 设置为一个非常大的值,并且(只是为了确定)将加速增量值 (nInc) 设置为“保持”为 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 用于`lParam)来完全禁用加速,但这是不是记录在案的功能。 (不过值得一试吗?)

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多