zoukankan      html  css  js  c++  java
  • 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 计时器

  • 相关阅读:
    C++字符串转数字,数字转字符串
    [转]基础知识整理
    POJ 3071 Football
    POJ 3744 Scout YYF I
    2013成都Regional:一块木板,几个气球
    HDOJ 4497 GCD and LCM
    POJ 1185 炮兵阵地
    POJ 2031 Building a Space Station
    HDOJ 4717 The Moving Points
    CSU 1328: 近似回文词
  • 原文地址:https://www.cnblogs.com/finehappy/p/6645513.html
Copyright © 2011-2022 走看看