ilovehellworld 2023-02-27 14:18 采纳率: 57.1%
浏览 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 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分