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

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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)来完全禁用加速,但这是不是记录在案的功能。 (不过值得一试吗?)

【讨论】:

以上是关于MFC:你能在 CDateTimeCtrl 中改变旋转的加速度吗?的主要内容,如果未能解决你的问题,请参考以下文章

MFC 如何在CDateTimeCtrl控件里初始显示出字符串“YYYY-MM-DD”

MFC SDI 自绘CDateTimeCtrl 实现"年月日时分秒",并存入数据库(DATATIME)

Git:你能在master改变后更新分支吗?

CDateTimeCtrl 在 Windows 10 RS2(内部版本 1703)上不显示时间

你能在 SVG 属性上使用 CSS 过渡吗?像 y2 一样?

关于mfc 对话框 DATETIMEPICKER控件的使用