W10 現在時刻

MessageDialog で時間を置いて現在時刻を取得します。
mm,ss,ns を swprintf() で編集して文字列に格納します。

前田稔の超初心者のプログラム入門

プロジェクトの作成

  1. Windows ストアアプリの C++ が従来の .NET Framework のものではなく、新しい WinRT というAPIを利用しています。
    従って Windows7 以前の API とは何かと様子が違うようです。
    最初にテストする簡単な例として Windows10 & Visual Studio Community 2015 の環境で MessageDialog に現在時刻を表示します。
  2. Visual Studio Community 2015 を起動します。
    [ファイル][新規作成][プロジェクト][Visual C++]から[空白のアプリ(ユニバーサル Windows)]を選びます。
    名前は規定値のまま App1(App1 が使われていると App2)にします。
    プロジェクトの作成は XAML で図形を描画 を参照して下さい。
  3. MainPage.xaml.cpp を次のように修正して下さい。
    MainPage::MainPage()
    {
        InitializeComponent();
        Windows::Globalization::Calendar^ cal = ref new Windows::Globalization::Calendar();
        auto longTime = ref new Windows::Globalization::DateTimeFormatting::DateTimeFormatter("longtime");
        DateTime time = cal->GetDateTime();
        Platform::String^ result = longTime->Format(time);
        auto dlg = ref new Windows::UI::Popups::MessageDialog(result);
        dlg->ShowAsync();
    }
    
  4. プログラムを実行すると MessageDialog に現在時刻が表示されます。

間隔を置いて時刻を取得

  1. 次に、乱数で間隔を置いて「時刻を印字」してみましょう。
    Sleep(rand() % 5000); で間隔を置きます。
    Calendar^ cal; から直接「分, 秒, ナノ秒」を取得して OutputDebugString で印字します。
    文字列の編集には swprintf() を使います。
  2. MainPage.xaml.cpp を次のように修正して下さい。
    MainPage::MainPage()
    {
        InitializeComponent();
        Windows::Globalization::Calendar^ cal;
        int mm, ss, ns;
        cal = ref new Windows::Globalization::Calendar();
        mm = cal->Minute;
        ss = cal->Second;
        ns = cal->Nanosecond;
        wchar_t str[80];
        swprintf(str, 80, L"%d:%d:%d\n", mm, ss, ns);
        OutputDebugString(str);
    
        Sleep(rand() % 5000);
        cal = ref new Windows::Globalization::Calendar();
        mm = cal->Minute;
        ss = cal->Second;
        ns = cal->Nanosecond;
        swprintf(str, 80, L"%d:%d:%d\n", mm, ss, ns);
        OutputDebugString(str);
    
        Sleep(rand() % 5000);
        cal = ref new Windows::Globalization::Calendar();
        mm = cal->Minute;
        ss = cal->Second;
        ns = cal->Nanosecond;
        swprintf(str, 80, L"%d:%d:%d\n", mm, ss, ns);
        OutputDebugString(str);
    }
    
  3. OutputDebugString() を使うと出力ウインドウに印字されます。
    乱数で間隔を置くので、実行するごとに時間間隔が変わることを確かめて下さい。
    Sleep() で 0~4999 ミリ秒の間隔を取っています。

超初心者のプログラム入門(C/C++)