アフィリエイト広告を利用しています

広告

posted by fanblog

2018年05月14日

《その385》時計の作成


 時計の作成

 本ブログの《383》《384》で、時計作成のための準備は完了しているので、今回は、実際に 時計の形にまとめてみました。

add_d094.png

add_d092.png

add_d093.png

add_d091.png


 以下は、MainPage.xaml.cpp です。

//
// MainPage.xaml.cpp
// MainPage クラスの実装。
//


#include "pch.h"
#include "MainPage.xaml.h"

using namespace App5;

using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;


float pi = 3.1416f;
int s = 0; int m = 0; int h = 0; // 秒,分,時
float len_s = 140; // 秒針の長さ
float len_m = 115; // 分針の長さ
float len_h = 90; // 時針の長さ

// 秒針・分針・時針 先端の x座標と y座標
float xs = 0; float ys = 0;
float xm = 0; float ym = 0;
float xh = 0; float yh = 0;

// 時計中心の x座標と y座標
float xc = 150; float yc = 150;


MainPage::MainPage() {
InitializeComponent();

// 文字盤
Shapes::Ellipse^ circle;
circle = ref new Shapes::Ellipse();
circle->Width = 300;
circle->Height = 300;
circle->Fill
= ref new SolidColorBrush(Windows::UI::Colors::Beige);
canvas1->Children->Append(circle);

// 時間目盛り
for (int i = 0; i < 12; i++) {
auto line = ref new Shapes::Line();
line->Stroke
= ref new SolidColorBrush(Windows::UI::Colors::Gray);
if (i % 3)
line->StrokeThickness = 2;
else
line->StrokeThickness = 4;
line->X1 = 150 + 130 * cos((90 - 30 * i) * pi / 180);
line->Y1 = 150 - 130 * sin((90 - 30 * i) * pi / 180);
line->X2 = 150 + 150 * cos((90 - 30 * i) * pi / 180);
line->Y2 = 150 - 150 * sin((90 - 30 * i) * pi / 180);
canvas1->Children->Append(line);
}

// Canvas 位置
canvas1->Margin = Thickness(50, 20, 0, 0);
canvas2->Margin = Thickness(50, 20, 0, 0);
canvas3->Margin = Thickness(50, 20, 0, 0);
canvas4->Margin = Thickness(50, 20, 0, 0);

StartTimer();
}


// 時・分・秒の取得

void func() {
int temp = s;
do {
time_t timeUTC = time(NULL);
struct tm local;
localtime_s(&local, &timeUTC);
s = local.tm_sec;
m = local.tm_min;
h = local.tm_hour;
} while (s == temp);
}


// 秒針・分針・時針 の描画、時刻のデジタル表示
void MainPage::f() {
// 時針
auto line_h = ref new Shapes::Line();
line_h->Stroke
= ref new SolidColorBrush(Windows::UI::Colors::Blue);
line_h->StrokeThickness = 8;
line_h->X1 = xh; line_h->Y1 = yh;
line_h->X2 = xc; line_h->Y2 = yc;
canvas2->Children->Clear();
canvas2->Children->Append(line_h);

// 分針
auto line_m = ref new Shapes::Line();
line_m->Stroke
= ref new SolidColorBrush(Windows::UI::Colors::Green);
line_m->StrokeThickness = 5;
line_m->X1 = xm; line_m->Y1 = ym;
line_m->X2 = xc; line_m->Y2 = yc;
canvas3->Children->Clear();
canvas3->Children->Append(line_m);

// 秒針
auto line_s = ref new Shapes::Line();
line_s->Stroke
= ref new SolidColorBrush(Windows::UI::Colors::Red);
line_s->StrokeThickness = 2;
line_s->X1 = xs; line_s->Y1 = ys;
line_s->X2 = xc; line_s->Y2 = yc;
canvas4->Children->Clear();
canvas4->Children->Append(line_s);

// 時刻のデジタル表示
String^ str_s;
str_s = s.ToString();
if (s < 10)
str_s = "0" + str_s;
String^ str_m;
str_m = m.ToString();
if (m < 10)
str_m = "0" + str_m;
String^ str_h;
str_h = h.ToString();
if (h < 10)
str_h = "0" + str_h;
block->Text = str_h + ":" + str_m + ":" + str_s;
}


// タイマーのスタート
void MainPage::StartTimer() {
auto timer = ref new Windows::UI::Xaml::DispatcherTimer();

TimeSpan span;
span.Duration = 1000000;
timer->Interval = span;

timer->Start();
auto rcpt
= timer->Tick +=
ref new EventHandler<Object^>(this, &MainPage::OnTick);
}


// タイマー ON のときの作業
void MainPage::OnTick(Object^ sender, Object^ e) {
func();
xs = 150 + len_s * cos((90 - 6 * s) * pi / 180);
ys = 150 - len_s * sin((90 - 6 * s) * pi / 180);
xm = 150 + len_m * cos((90 - 6 * m - 0.1f * s) * pi / 180);
ym = 150 - len_m * sin((90 - 6 * m - 0.1f * s) * pi / 180);
xh = 150 + len_h * cos((90 - 30 * h - 0.5f * m) * pi / 180);
yh = 150 - len_h * sin((90 - 30 * h - 0.5f * m) * pi / 180);
f();
}




この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7656717
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。