MFC: 可以在CDateTimeCtrl中改变旋转的加速度吗?

问题描述 投票:0回答:1

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

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

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

visual-studio-2015 datepicker mfc
1个回答
2
投票

你可以检索你的 CDateTimeCtrl 对象的包含的 "旋转按钮",使用类 GetDateTimePickerInfo() 成员函数,它将在 hwndUD 归国人员 DATETIMEPICKERINFO 结构。

然后,您可以通过向自旋控制发送 UDM_SETACCEL 讯息,与 wParam 设为 1lParam 指向一个1元素的 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));

如果~8166年UINT_MAX 秒)的时间太短了,你可以直接添加更多(相同的)的 UDACCEL 😊

可以通过以下方式完全禁止加速 0 作为 wParam 争论,以 SetAccel 功能 NULL 为`lParam),但这不是一个记录在案的功能。(但值得一试?)

© www.soinside.com 2019 - 2024. All rights reserved.