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
设置为1
和lParam
指向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)
CDateTimeCtrl 在 Windows 10 RS2(内部版本 1703)上不显示时间