ilovehellworld 2023-02-27 14:18 采纳率: 50%
浏览 139
已结题

基于毫秒的时间控件类,帮我写个demo

我网上下载了一个基于毫秒的时间控件类,但是不知道怎么用?请帮我写个demo
vs unicode + mfc
谢谢

  • 写回答

8条回答 默认 最新

  • Zyb0627 2023-03-03 10:00
    关注

    以下是一个基于毫秒的时间控件的示例代码,使用Visual Studio、Unicode字符集和MFC框架:

    首先,在资源编辑器中创建一个编辑框控件,类型设置为“编辑”,ID设置为 IDC_TIME_EDIT。然后,在对话框类的头文件中添加以下代码:

    class CMyDialog : public CDialogEx
    {
    public:
        CMyDialog(CWnd* pParent = nullptr);
    
        // ...
    
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        afx_msg void OnEnChangeTimeEdit();
    
        DECLARE_MESSAGE_MAP()
    
    private:
        CEdit m_timeEdit;    // 毫秒时间控件
    };
    
    

    在DoDataExchange函数中添加以下代码,将编辑框控件关联到成员变量 m_timeEdit:

    void CMyDialog::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_TIME_EDIT, m_timeEdit);
    }
    

    然后,在OnInitDialog函数中添加以下代码,设置编辑框控件的格式为“hh:mm:ss.mmm”,并将其默认值设置为当前时间:

    BOOL CMyDialog::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 设置时间格式为“hh:mm:ss.mmm”
        m_timeEdit.SetWindowTextW(L"00:00:00.000");
    
        // 获取当前时间
        SYSTEMTIME st;
        GetLocalTime(&st);
    
        // 将当前时间设置为默认值
        CString strTime;
        strTime.Format(L"%02d:%02d:%02d.%03d", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
        m_timeEdit.SetWindowTextW(strTime);
    
        return TRUE;
    }
    

    接下来,在对话框类的消息映射中添加以下代码,处理编辑框控件内容改变的事件:

    BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
        ON_EN_CHANGE(IDC_TIME_EDIT, &CMyDialog::OnEnChangeTimeEdit)
    END_MESSAGE_MAP()
    

    在OnEnChangeTimeEdit函数中添加以下代码,用于验证用户输入的时间格式是否正确:

    void CMyDialog::OnEnChangeTimeEdit()
    {
        // 获取用户输入的时间
        CString strTime;
        m_timeEdit.GetWindowTextW(strTime);
    
        // 正则表达式验证时间格式是否正确
        CAtlRegExp<> regex;
        REParseError status = regex.Parse(L"^(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})$");
        if (status == REPARSE_ERROR_OK)
        {
            CAtlREMatchContext<> match;
            if (regex.Match(strTime, &match))
            {
                // 时间格式正确
            }
            else
            {
                // 时间格式错误,恢复上一次正确的时间
                m_timeEdit.SetWindowTextW(m_lastTime);
            }
        }
    
        // 记录上一次正确的时间
        m_lastTime = strTime;
    }
    

    最后,将上述代码添加到对话框类的实现文件中,并在需要创建该对话框的代码中使用以下代码创建对话框实例:

    CMyDialog dlg;
    dlg.DoModal();
    

    回答不易,还请能够采纳!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大