Win10系列:VC++ 定时器

计时器机制俗称"心跳",表示以特定的频率持续触发特定事件和执行特定程序的机制。在开发Windows应用商店应用的过程中,可以使用定义在Windows::UI::Xaml命名空间中的DispatcherTimer类来创建计时器。DispatcherTimer类包含了如下的成员:

  • Tick事件,周期性触发的事件。
  • Start函数,用于启动计时器。
  • Stop函数,用于停止计时器。
  • Interval属性,设置触发Tick事件的时间周期,此属性值的类型为TimeSpan。

简单介绍了DispatcherTimer类之后,接下来模拟实现一个简易的计时器。在Visual Staudio 2012中新建一个Visual C++的Windows应用商店的空白应用程序项目,并命名为DispatcherTimerDemo,接着在MainPage.xaml文件的Grid元素中添加如下的代码,用于布局前台界面。

<StackPanel HorizontalAlignment="Center" Margin="50,300,0,0">

<TextBlock x:Name="ClockText" FontSize="24"></TextBlock>

<Grid>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="Auto"></ColumnDefinition>

<ColumnDefinition Width="*"></ColumnDefinition>

</Grid.ColumnDefinitions>

<Button x:Name="Start" Click="StartClick" Content="开始" Grid.Column="0"></Button>

<Button x:Name="Stop" Click="StopClick" Content="停止" Grid.Column="1"></Button>

</Grid>

</StackPanel>

在上面的代码中,添加了一个TextBlock控件和两个按钮。将这个TextBlock控件命名为ClockText,用来显示计时器的计时。两个按钮分别为"开始"按钮和"停止"按钮,其中"开始"按钮用来启动计时器,"停止"按钮用来停止计时器。

布局了前台界面以后,接下来添加计时器的后台实现代码。打开MainPage.xaml.h头文件,添加如下的代码:

private:

    //声明DispatcherTimer类型变量timer

    Windows::UI::Xaml::DispatcherTimer^ timer;

    //声明TimeSpan类型变量timeSpan

    Windows::Foundation::TimeSpan timeSpan;

    //声明int32类型变量

    int32 highNum;

    //声明int32类型变量

    int32 lowNum;

在上面的代码中,使用private关键字声明了四个私有的成员变量,分别为timer、timeSpan、highNum和lowNum,其中timer是一个DispatcherTimer类型的变量,用来表示计时器,timeSpan为TimeSpan类型的变量,用来表示时间。highNum和lowNum都为int32类型的变量,分别代表计时器的十位数和个位数。

声明了上述的变量之后,接下来打开MainPage.xaml.cpp源文件,并在构造函数中添加如下的代码:

MainPage::MainPage()

{

    InitializeComponent();

    //创建DispatcherTimer类的对象

    timer=ref new DispatcherTimer();

    //Tick事件添加事件函数

    timer->Tick +=ref new EventHandler<Object^>(this,&DispatcherTimerDemo::MainPage::DispatcherTimerTick);

    // Duration属性记录的时间为1s

    timeSpan.Duration=10000000;

    //设置时间间隔

    timer->Interval=timeSpan;

    //highNum变量赋值0

    highNum=0;

    //lowNum变量赋值0

    lowNum=0;

}

在上面的代码中,初始化一个DispatcherTimer类的对象timer,并为timer对象的Tick事件添加事件处理函数DispatcherTimerTick,后面将介绍DispatcherTimerTick函数的具体实现代码。然后把timeSpan变量的Duration属性赋值为10000000,并将timeSpan变量赋值给timer对象的Interval属性,使timer对象的Tick事件每1秒触发一次。最后将highNum变量和lowNum变量分别赋值为0,用于表示计时器的起始时间。

在实现DispatcherTimerTick函数之前,首先需要在MainPage.xaml.h头文件中进行声明,代码如下所示:

public:

    //更新计时器计时

    void DispatcherTimerTick(Object^ sender, Object^ e);

在上述代码中,使用public关键字声明一个公有的DispatcherTimerTick函数,此函数用来更新计时器的计时,并将更新后的计时显示到前台界面中。

声明了DispatcherTimerTick函数以后,接下来在MainPage.xaml.cpp源文件中添加DispatcherTimerTick函数的实现代码,具体代码如下所示:

//更新计时器计时

void DispatcherTimerDemo::MainPage::DispatcherTimerTick(Object^ sender, Object^ e)

{

    //lowNum小于9时,lowNum1

    if(lowNum<9)

    {

        lowNum++;

    }

    else

    {

        //lowNum大于9时,将lowNum设为0

        lowNum=0;

        //highNum小于9时,highNum1

        if(highNum<9)

        {

            highNum++;

        }

        else

        {

            //highNum大于9时,将highNum设为0

            highNum=0;

        }

    }

    //将计时显示到TextBlock控件中

    ClockText->Text="开始计时:"+highNum+lowNum;

}

在上面的代码中,当lowNum变量的值小于9时,lowNum变量自增1。而当lowNum变量的值大于9时,将lowNum变量赋值为0,并设置highNum变量的值。同样,当highNum变量的值小于9时,highNum变量自增1。而当highNum变量大于9时,将highNum变量赋值为0。最后将highNum变量和lowNum变量赋值给名为"ClockText"的TextBlock控件的Text属性,用于将计时显示到前台界面中。

添加了DispatcherTimerTick函数的实现代码后,接下来为"开始"按钮添加单击事件处理函数StartClick。在MainPage.xaml.h头文件中添加如下的代码,用来声明StartClick函数。

public:

    //启动计时器

    void StartClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);

声明了StartClick函数之后,接下来在MainPage.xaml.cpp源文件中添加StartClick函数的实现代码,在此函数中调用timer对象的Start函数来启动计时器。具体代码如下所示:

//启动计时器

void DispatcherTimerDemo::MainPage::StartClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

{

    timer->Start();

}

接着给"停止"按钮添加单击事件处理函数StopClick,在MainPage.xaml.h头文件中添加如下的代码,用来声明StopClick函数。

public:

    //停止计时器

    void StopClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);

声明了StopClick函数之后,接下来在MainPage.xaml.cpp源文件中添加StopClick函数的实现代码,在此函数中调用timer对象的Stop函数来停止计时器。具体代码如下所示:

//停止计时器

void DispatcherTimerDemo::MainPage::StopClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

{

    timer->Stop();

}

运行DispatcherTimerDemo项目后,单击"开始"按钮启动计时器,显示如图20-1所示的计时器界面。

图20-1 计时器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dbms系统 rdbms_DBMS与传统文件系统之间的区别

dbms系统 rdbmsIntroduction 介绍 DBMS and Traditional file system have some advantages, disadvantages, applications, functions, features, components and uses. So, in this article, we will discuss these differences, advantages, disadvantages and many other …

android 百度地图api密钥,Android百度地图开发获取秘钥之SHA1

最近在做一个关于百度地图的开发。不过在正式开发之前还必须要在百度地图API官网里先申请秘钥&#xff0c;而在申请秘钥的过程中&#xff0c;就需要获取一个所谓的SHA1值。如上所示&#xff0c;但是由于不是正式开发&#xff0c;所以以上的发布版和开发版的SHA1可以先填写相同。…

华为荣耀七能升级鸿蒙系统吗,华为鸿蒙系统来了,你知道哪些华为手机荣耀手机可以升级吗?...

从鸿蒙系统第一次开始登场&#xff0c;到现在慢慢有许多鸿蒙系统设备出现&#xff0c;手机市场的格局似乎又要升级变化了。科技树儿了解到&#xff0c;在某数码博主经过和相关人员的沟通核实之后&#xff0c;目前暂定的是搭载华为麒麟710芯片以上的机型&#xff0c;无论华为或荣…

Tcl与Design Compiler (十二)——综合后处理

本文如果有错&#xff0c;欢迎留言更正&#xff1b;此外&#xff0c;转载请标明出处 http://www.cnblogs.com/IClearner/ &#xff0c;作者&#xff1a;IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作&#xff0c;这里就集中讲一下DC完成综合了&#xff0c;产生了…

四则运算网页版

一.设计思想&#xff1a; 1&#xff09;写出一个菜单界面&#xff0c;有两个选项一个是分数&#xff0c;一个是整数。 2&#xff09;而这两个标签后面则是转向其更详细的菜单&#xff0c;题目数量&#xff0c;有无括号&#xff0c;运算的项数等等详细功能&#xff0c;再点击这两…

分布式交换机配置备份和还原

1.备份和还原vSphere Distributed Switch配置 1.1导出 vSphere Distributed Switch 配置 可以将 vSphere Distributed Switch 和分布式端口组配置导出到某一文件。该文件保留有效的网络配置&#xff0c;使这些配置能够传输至其他环境。 步骤&#xff1a; 1) 在 vSphere Web Cli…

华为鸿蒙系统好在哪,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上&#xff0c;华为消费业务CEO 余承东&#xff0c;正式发布鸿蒙OS2.0&#xff0c;并宣布华为鸿蒙OS将全面启用全场景生态&#xff0c;并将于2020年12月发布手机版。余承东还表示&#xff0c;明年&#xff0c;华为的智能手机将全面升级&#xff0c;以支持鸿蒙操…

html5画分形图形,2.5 绘制透明图形 - HTML5 Canvas 实战

对于需要图形分层的应用&#xff0c;经常需要处理透明度。本节&#xff0c;我们将学习如何使用全局透明度设置图形的透明度。图2-5 绘制透明图形绘制步骤按照以下步骤&#xff0c;在一个不透明的矩形之上&#xff0c;绘制一个透明的圆&#xff1a;1. 定义2D画布上下文&#xff…

html5录音功能代码,recorder.js 基于 HTML5 实现录音功能

recorder.js 基于 HTML5 实现录音功能2020-06-23 01:49:56recorder.jsmicrophone基于HTML5的录音功能&#xff0c;输出格式为mp3文件。前言完全依赖H5原生API所涉及的API&#xff1a;WebRTC、AudioContext、Worker、Video/Audio API、Blob、URL兼容性Chrome、FF、Edge、QQ、360…

html5页面引入jquery,如何在javascript中引入jQuery?

jquery是一个用来代替JavaScript来快捷书写前端脚本语言的库&#xff0c;jquery可以大大的简化复杂的js代码&#xff0c;使开发人员专注于实现页面的效果。jquery的导入方式有两种&#xff0c;一种是本地导入&#xff0c;一种是从超链接导入。方式一&#xff1a;本地导入我们可…

湖南省普通招生2021高考成绩查询,湖南省2021八省联考成绩可查,附查询入口及往年分数线...

原标题&#xff1a;湖南省2021八省联考成绩可查&#xff0c;附查询入口及往年分数线湖南省2021年八省联考新高考适应性考试成绩公布&#xff0c;这次大家考的如何呢&#xff1f;此次成绩排名对于考生择校及志愿填报有一定的参考意义&#xff0c;小盒一时间收集整理相关消息&…

Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!

跨平台系列汇总&#xff1a;http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装系统软件卸载&#xff1a;http://www.cnblogs.com/dunitian/p/6670560.html 1.下载UnityGnome版本 https://wiki.ubuntu.com/UbuntuGNOME/GetUbuntuGNOME 2.打开终端 or CtrlAltT…

html木桶布局,CSS3如何实现图片木桶布局?(附代码)

本篇文章给大家通过代码示例介绍一下使用CSS3实现图片木桶布局的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。高度相同&#xff0c;而宽度不一样的布局&#xff0c;称之为木桶布局。它有几个鲜明的特点&#xff1a; 每行的图片…

万用表怎么测量电池容量_万用表检测光电耦合器的常用技巧

光电耦合器又称光耦合器或光耦&#xff0c;它属于较新型的电子产品&#xff0c;已经广泛应用在彩色电视机、彩色显示器、计算机、音视频等各种控制电路中。光电耦合器的构成和原理常见的光电耦合器有 4 脚直插和 6 脚两种&#xff0c;它们的典型实物外形和电路符号如图 3-4所示…

hanlp 训练模型_LTP 4.0!单模型完成6项自然语言处理任务

来源|哈工大SCIR语言技术平台&#xff08;Language Technology Platform, LTP&#xff09;是哈工大社会计算与信息检索研究中心&#xff08;HIT-SCIR&#xff09;历时多年研发的一整套高效、高精度的中文自然语言处理开源基础技术平台。该平台集词法分析&#xff08;分词、词性…

typescript 学习

typescript将在不久的将来从前端大一统的趋势中脱颖而出成为主流编译器。学习ts对前端开发人员来说是不可或缺的。同时&#xff0c;也要抓紧学习es2015/6/7。ts和es6并不是对立的。而是相辅相成的。ts的竞争和打击对象实质上是babel…… 官方资料 # 官方地址&#xff1a; https…

计算机中央处理器cpu_中央处理器(CPU)| 计算机科学组织

计算机中央处理器cpu中央处理器(CPU) (Central Processing Unit (CPU)) The CPU is the brain of the computer system. It works as an administrator of a system. CPU是计算机系统的大脑。 它以系统管理员的身份工作。 All the operations within the system are supervised…

computed set 自定义参数_深入理解vmodel之自定义组件用法

根据上一篇《深入理解 v-model 之表单用法》基本对 v-model 有了比较深的理解&#xff0c;接下来我们看看它如何在自定义组件中使用。首先&#xff0c;我们知道下面两个用法等价的&#xff1a;<input v-model"msg" /><input :value"msg" input&qu…

AYUSH的完整形式是什么?

AYUSH&#xff1a;阿育吠陀&#xff0c;瑜伽和自然疗法&#xff0c;乌纳尼&#xff0c;悉达多和顺势疗法 (AYUSH: Ayurvedic, Yoga and Naturopathy, Unani, Siddha and Homeopathy) AYUSH is an abbreviation of Ayurvedic, Yoga and Naturopathy, Unani, Siddha, and Homeopa…

arraylist能否接收强转类型_ArrayList 源码解析

点击上方"IT牧场"&#xff0c;选择"设为星标"技术干货每日送达&#xff01;前言 JDK源码解析系列文章&#xff0c;都是基于JDK8分析的&#xff0c;虽然JDK14已经出来&#xff0c;但是JDK8我还不会&#xff0c;我…类图 实现了RandomAccess接口&#xff0c;…