计时器机制俗称"心跳",表示以特定的频率持续触发特定事件和执行特定程序的机制。在开发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时,lowNum增1

    if(lowNum<9)

    {

        lowNum++;

    }

    else

    {

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

        lowNum=0;

        //highNum小于9时,highNum增1

        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 计时器

Win10系列:VC++ 定时器的更多相关文章

  1. Win10系列:VC++调用自定义组件3

    (3)C++/CX调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C++的Windows应用商店的空白应用程序项目,并命名为FileCPP.接着右键点击Fil ...

  2. Win10系列:VC++调用自定义组件2

    (2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...

  3. Win10系列:VC++调用自定义组件1

    通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...

  4. Win10系列:VC++ Direct3D图形绘制1

    通过前面的介绍,相信读者已经了解了如何新建一个用于开发Direct3D应用程序的项目模版,以及这个项目模版中用于绘制立体图形的主要函数.在本小节中,将通过一个具体的示例来介绍如何使用Visual St ...

  5. Win10系列:VC++ Direct3D模板介绍2

    (3)CreateDeviceResources函数 CreateDeviceResources函数默认添加在CubeRenderer.cpp源文件中,此函数用于创建着色器和立体图形顶点.接下来分别介 ...

  6. Win10系列:VC++ Direct3D模板介绍3

    (4)Render函数 默认定义在CubeRenderer.cpp源文件中的Render函数用于绘制立体图形,此函数的实现代码如下所示: void CubeRenderer::Render() {   ...

  7. Win10系列:VC++ Direct3D模板介绍1

    Visual Studio为开发Direct3D应用程序提供了便捷的模版,读者可以不必手动去新建Direct3D中所使用到的基础资源,而只需专注于图形的绘制.本小节主要为读者介绍这个模版中用于绘制图形 ...

  8. Win10系列:VC++ Direct3D开发基础1

    在介绍如何使用Direct3D项目模版来绘制立体图形之前,首先为读者介绍在Direct3D应用程序开发过程中涉及到的一些常用概念. (1)资源 资源是指可以被Direct3D图形管线所访问的内存空间, ...

  9. Win10系列:VC++绘制文本

    20.7.2小节介绍了如何使用Direct2D在应用窗口中绘制图片,本小节将基于20.7.2小节的项目进一步介绍如何实现文本的绘制.打开D2DBasicAnimation.h头文件,并在D2DBasi ...

随机推荐

  1. [原][spark]帧序列的纹理UV索引,修改spark源码,改变纹理索引方式,支持常规帧序列

    spark的纹理索引方式是左下为最小值0 右上为最大值k ,遍历顺序为横向即: 3 4 5 0 1 2 而常规的纹理帧序列是这样的: 0 1 2 3 4 5 所以,为了让spark的纹理遍历顺序能按照 ...

  2. java获取当前项目或类路径

    // 获取当前项目的目录 File directory = new File("");// 参数为空 String courseFile = directory.getCanoni ...

  3. 如何在Vue项目中使用vw实现移动端适配(转)

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...

  4. Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  5. learn the python the hard way习题26~30总结

    考试试题26错误总结: 漏写字母,括号 写错字母 write(),read()的使用:只能打开使用了 open() 后返回的文件对象(file object),而不能直接使用文件名 if 语句中,条件 ...

  6. HTML 第十二章总结

    HTML5 markup 前言 在这一章中,讲解了新的 HTML5 的一些 markup,并且对其中的<video>进行了很详细的讲解. New HTML5 elements 列表如下: ...

  7. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  8. android -------- android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)

    今天简单来说一下android studio开发工具中的 一个小设置功能: 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期.时间和作者等. 设置信息 File—>Settings—&g ...

  9. Known Notation ZOJ - 3829 (后缀表达式,贪心)

    大意:给定后缀表达式, 每次操作可以添加一个字符, 可以交换两个字符的位置, 相邻数字可以看做一个整体也可以分开看, 求合法所需最少操作数. 数字个数一定为星号个数+1, 添加星号一定不会更优. 先判 ...

  10. python-day1笔记

    # 1.编程语言的作用及与操作系统和硬件的关系:#编程语言就是人与电脑之间沟通的介质. # 2.应用程序->操作系统->硬件:#应用程序通过操作系统来控制计算机硬件. #3. cpu-&g ...