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时,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++ 定时器的更多相关文章
- Win10系列:VC++调用自定义组件3
(3)C++/CX调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C++的Windows应用商店的空白应用程序项目,并命名为FileCPP.接着右键点击Fil ...
- Win10系列:VC++调用自定义组件2
(2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...
- Win10系列:VC++调用自定义组件1
通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...
- Win10系列:VC++ Direct3D图形绘制1
通过前面的介绍,相信读者已经了解了如何新建一个用于开发Direct3D应用程序的项目模版,以及这个项目模版中用于绘制立体图形的主要函数.在本小节中,将通过一个具体的示例来介绍如何使用Visual St ...
- Win10系列:VC++ Direct3D模板介绍2
(3)CreateDeviceResources函数 CreateDeviceResources函数默认添加在CubeRenderer.cpp源文件中,此函数用于创建着色器和立体图形顶点.接下来分别介 ...
- Win10系列:VC++ Direct3D模板介绍3
(4)Render函数 默认定义在CubeRenderer.cpp源文件中的Render函数用于绘制立体图形,此函数的实现代码如下所示: void CubeRenderer::Render() { ...
- Win10系列:VC++ Direct3D模板介绍1
Visual Studio为开发Direct3D应用程序提供了便捷的模版,读者可以不必手动去新建Direct3D中所使用到的基础资源,而只需专注于图形的绘制.本小节主要为读者介绍这个模版中用于绘制图形 ...
- Win10系列:VC++ Direct3D开发基础1
在介绍如何使用Direct3D项目模版来绘制立体图形之前,首先为读者介绍在Direct3D应用程序开发过程中涉及到的一些常用概念. (1)资源 资源是指可以被Direct3D图形管线所访问的内存空间, ...
- Win10系列:VC++绘制文本
20.7.2小节介绍了如何使用Direct2D在应用窗口中绘制图片,本小节将基于20.7.2小节的项目进一步介绍如何实现文本的绘制.打开D2DBasicAnimation.h头文件,并在D2DBasi ...
随机推荐
- Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x,这里提供一种比较快捷方便的安装方式
安装必要工具 yum-utils: $ sudo yum install yum-utils 使用yum-builddep为Python3构建环境,安装缺失的软件依赖,使用下面的命令会自动处理.$ s ...
- MySQL 的 DISTINCT 应用于2列时
SELECT DISTINCT vend_id告诉MySQL只返回不同(唯一)的 vend_id行,也就是在vend_id 有重复的行中,只保留一行,其他的不作输出.比如我创建了如下的student表 ...
- R语言barplot双坐标作图
需要注意的是,设置其中的柱子的宽度,间隔的宽度.有公式如下 width为柱子的宽度 space为间隔宽度 barnumbers 为柱子数量 那么xlim的设置右侧范围为:(width + space) ...
- Codeforces 939E - Maximize!
939E - Maximize! 思路: 贪心:最后的集合是最大值+前k小个 因为平均值时关于k的凹形函数,所以可以用三分求最小值 又因为后面的k肯定比前面的k大,所以又可以双指针 三分: #incl ...
- Python Scrapy 爬虫框架实例(一)
之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...
- java重新学习记载的一些资料。
1.ided的注册码地址. IDEA的密码:http://idea.lanyus.com/ 2.
- spring cloud: zuul(五): prefix访问前缀, ignoredServices粗粒度访问, yml不起作用
路由的前缀 - 问题 zuul.prefix: 我们可以指定一个全局的前缀 strip-prefix: 是否将这个代理前缀去掉 zuul: prefix: /ecom 我的eureka:http:// ...
- 雷林鹏分享:服务器上的 XML
服务器上的 XML XML 文件是类似 HTML 文件的纯文本文件. XML 能够通过标准的 Web 服务器轻松地存储和生成. 在服务器上存储 XML 文件 XML 文件在 Internet 服务器上 ...
- Jumpserver3.0部署(Centos6.x)
1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...
- canvas学习之柱状图
项目地址:http://pan.baidu.com/s/1nvhWrwP 因为最近项目中使用到了图表,而且个人一直希望研究canvas,所以最近几天花时间对canvas好好研究了一下,并写了一个dem ...