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.pswp.cn/news/541676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541676.shtml
英文地址,請注明出處:http://en.pswp.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可以先填寫相同。…

單位矩陣的逆| 使用Python的線性代數

Prerequisites: 先決條件&#xff1a; Defining a Matrix 定義矩陣 Identity Matrix 身份矩陣 There are matrices whose inverse is the same as the matrices and one of those matrices is the identity matrix. 有些矩陣的逆與矩陣相同&#xff0c;并且這些矩陣之一是單位…

華為榮耀七能升級鴻蒙系統嗎,華為鴻蒙系統來了,你知道哪些華為手機榮耀手機可以升級嗎?...

從鴻蒙系統第一次開始登場&#xff0c;到現在慢慢有許多鴻蒙系統設備出現&#xff0c;手機市場的格局似乎又要升級變化了。科技樹兒了解到&#xff0c;在某數碼博主經過和相關人員的溝通核實之后&#xff0c;目前暫定的是搭載華為麒麟710芯片以上的機型&#xff0c;無論華為或榮…

day5-shutil模塊

一、簡述 我們在日常處理文件時&#xff0c;經常用到os模塊&#xff0c;但是有的時候你會發現&#xff0c;像拷貝、刪除、打包、壓縮等文件操作&#xff0c;在os模塊中沒有對應的函數去操作&#xff0c;下面我們就來講講高級的 文件、文件夾、壓縮包 處理模塊&#xff1a;shuti…

matlab中now函數_now()方法以及JavaScript中的示例

matlab中now函數JavaScript now()方法 (JavaScript now() method) now() method is a Date class method, it is used to current time in milliseconds, it returns the total number of milliseconds since 01st January 1970, 00:00:00 UTC. now()方法是Date類的一種方法&am…

android 集成x5內核時 本地沒有,騰訊瀏覽服務-接入文檔

三、SDK集成步驟1. 第一步下載 SDK jar 包放到工程的libs目錄下&#xff0c;將源碼和XML里的系統包和類替換為SDK里的包和類&#xff0c;具體對應如下&#xff1a;系統內核SDK內核android.webkit.ConsoleMessagecom.tencent.smtt.export.external.interfaces.ConsoleMessageand…

java vector_Java Vector sureCapacity()方法與示例

java vector向量類別sureCapacity()方法 (Vector Class ensureCapacity() method) ensureCapacity() method is available in java.util package. sureCapacity()方法在java.util包中可用。 ensureCapacity() method is used to ensure the capacity of this Vector when requi…

Tcl與Design Compiler (十二)——綜合后處理

本文如果有錯&#xff0c;歡迎留言更正&#xff1b;此外&#xff0c;轉載請標明出處 http://www.cnblogs.com/IClearner/ &#xff0c;作者&#xff1a;IC_learner 概述 前面也講了一些綜合后的需要進行的一些工作&#xff0c;這里就集中講一下DC完成綜合了&#xff0c;產生了…

Java短類的compareTo()方法和示例

簡短的類compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Short object against the given Short obj…

四則運算網頁版

一.設計思想&#xff1a; 1&#xff09;寫出一個菜單界面&#xff0c;有兩個選項一個是分數&#xff0c;一個是整數。 2&#xff09;而這兩個標簽后面則是轉向其更詳細的菜單&#xff0c;題目數量&#xff0c;有無括號&#xff0c;運算的項數等等詳細功能&#xff0c;再點擊這兩…

Java RandomAccessFile seek()方法與示例

RandomAccessFile類seek()方法 (RandomAccessFile Class seek() method) seek() method is available in java.io package. seek()方法在java.io包中可用。 seek() method is used to sets the file pointer position calculated from the starting of this file at which the …

Javascript開發技巧(JS中的變量、運算符、分支結構、循環結構)

一、Js簡介和入門 繼續跟進JS開發的相關教程。 <!-- [使用JS的三種方式] 1、HTML標簽中內嵌JS&#xff08;不提倡使用&#xff09;&#xff1a; 示例&#xff1a;<button οnclick"javascript:alert(你真點啊&#xff01;)">有本事點我呀&#xff01;&#…

android 顏色范圍,Android系統顏色的適用范圍

###All Clickable Views:ripple effect (Lollipop only) — “colorControlHighlight”###Status Bar:background (Lollipop only) – “colorPrimaryDark”###Navigation Bar:background (Lollipop only) – “android:navigationBarColor”###EditText:underline (unfocused)…

bytevalue_Java Short類byteValue()方法及示例

bytevalue短類byteValue()方法 (Short class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Short object converted to type byte (by …

分布式交換機配置備份和還原

1.備份和還原vSphere Distributed Switch配置 1.1導出 vSphere Distributed Switch 配置 可以將 vSphere Distributed Switch 和分布式端口組配置導出到某一文件。該文件保留有效的網絡配置&#xff0c;使這些配置能夠傳輸至其他環境。 步驟&#xff1a; 1) 在 vSphere Web Cli…

html自動執行函數,JS 自執行函數原理及用法

js自執行函數&#xff0c;聽到這個名字&#xff0c;首先會聯想到函數。接下來&#xff0c;我來定義一個函數&#xff1a;function aaa(a,b){return sum a b}定義了一個名為aaa的函數&#xff0c;在里面可以計算兩個數的和。如果想執行它&#xff0c;就必須得調用它&#xff0…

java reverse_Java Integer類reverse()方法與示例

java reverse整數類reverse()方法 (Integer class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to returns the value generated by reversing the order of bits in binary 2s comp…

華為鴻蒙系統好在哪,華為鴻蒙2.0可以替代安卓嗎,華為鴻蒙2.0優勢在哪

在華為開發者大會上&#xff0c;華為消費業務CEO 余承東&#xff0c;正式發布鴻蒙OS2.0&#xff0c;并宣布華為鴻蒙OS將全面啟用全場景生態&#xff0c;并將于2020年12月發布手機版。余承東還表示&#xff0c;明年&#xff0c;華為的智能手機將全面升級&#xff0c;以支持鴻蒙操…

Java GregorianCalendar add()方法與示例

GregorianCalendar類的add()方法 (GregorianCalendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to add the given quantity to the specified GregorianCalendar field (fi). add()方法用于…