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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC SDI 自绘CDateTimeCtrl 实现"年月日时分秒",并存入数据库(DATATIME)相关的知识,希望对你有一定的参考价值。

if (m_time_end==NULL)

m_time_end = new CDateTimeCtrl();
m_time_end->Create(WS_VISIBLE | WS_CHILD | WS_TABSTOP | DTS_SHOWNONE | DTS_SHORTDATEFORMAT,
CRect(220, 20, 400, 45), this, 2);

m_time_end->SetFormat(_T("yyyy-MM-dd HH:mm:ss"));
//CTime TimeTemp=TimeTemp.GetCurrentTime();
m_time_end->SetTime(&TimeTemp);

我用以上代码实现了 一个CDateTimeCtrl 显示“年月日时分秒”
可现在 我想将该控件的值 存到数据库中(DATATIME) 麻烦大神写两句代码?

参考技术A 叶翼随手又放出第二张灵符。鼠王反应十分的迅速,敏捷。叶翼前后放出的两只灵符一张都没有打中鼠王 参考技术B 到msdn网上论坛上求助一下吧本回答被提问者采纳

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

【中文标题】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 SDI 自绘CDateTimeCtrl 实现"年月日时分秒",并存入数据库(DATATIME)的主要内容,如果未能解决你的问题,请参考以下文章

MFC 把CString格式的时间添加到时间控件(CDateTimeCtrl)中去

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

如何在 SDI 中使用 MFC CListCtrl

MFC, SDI app, 为啥视图的布局不能通过代码改变?

C++ MFC SDI 创建子窗口

MFC 自绘按钮 消息响应