タイトルバーに時刻を表示する

VC++ の GetLocalTime() で時刻を取得して Dialog Box のタイトルバーに表示します。
DialogBox も Window の一種ですが、わずらわしいコードを書く必要がなく簡単に表示できるので、 DialogBox で事足りるときはお勧めの方法です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト](Dialog)を作成して下さい。
  2. DialogBoxを作成して[OK]と[キャンセル]をドラッグして適当な位置に配置して下さい。
    プロジェクトの作成は Dialog Box のプログラム を参照して下さい。

  3. Dialog.cpp をフォルダーに格納して[プロジェクト][既存項目の追加]からプロジェクトに追加します。
    プログラムはこのページの後に掲載しています。
  4. [デバッグ]を選択してビルドに続いて実行を行います。
    Dialog Box が表示されて時刻を刻んでいたら完成です。
    一般の Windows Program に比べてずいぶん簡単でしょう。 <(`^´)>

プログラムの説明

  1. ID_TIMER には、プログラムで使われている他のIDと重ならないように、適当な値を設定します。
        #define     ID_TIMER    32767
        
    値は何でも良いのですが、次のように定義する方法が推奨されています。
        #define     ID_TIMER    (WM_APP + 0)
        
  2. DialogProc() は DialogBox のコールバック関数です。
    WM_INITDIALOG: で、アプリケーションの初期化を行います。
    SetTimer() はタイマを設定する関数です。
    これ以降、300ミリ秒ごとにタイマ割り込みが発生します。
        {   case WM_INITDIALOG:
                SetTimer(hDlg, ID_TIMER, 300, NULL);
                break;
        
  3. タイマ割り込みが発生したときの処理です。
    現在時刻を取得してメッセージを編集します。
    SetWindowText() でタイトルバーに時刻を表示します。
        LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
        {   char        str[256];
            char        *str_org = "ただいまの時刻は %2d時%2d分%2d 秒です";
            SYSTEMTIME  STime;
                    :              //☆ここには元のソースコードが入ります。
            case WM_TIMER:
                GetLocalTime(&STime);
                wsprintf(str,str_org,STime.wHour,STime.wMinute,STime.wSecond);
                SetWindowText(hDlg,(LPCSTR)str);
                break;
        
  4. OK ボタンがクリックされたときの処理です。
    IDOK は OKボタンがクリックされたときの規定のIDです。
    WM_CLOSE をポストする PostMessage() を実行します。
        case WM_COMMAND:
            if (LOWORD(wParam)==IDOK)
            {   PostMessage(hDlg,WM_CLOSE,0,0);
                return TRUE;
            }
            break;
        
  5. WM_CLOSE: にはウインドウが閉じられる時に制御が渡されます。
    タイマを停止して DialogBox の処理を終了します。
        case WM_CLOSE:
            KillTimer(hDlg, ID_TIMER);
            EndDialog(hDlg, TRUE); 
            return TRUE;
        
  6. Windows 10 でも TitleBar を使うことが出来ます。
    例題は W32 TitleBar を参照して下さい。

漢字が正常に表示されない

WindowsME などで Dialog Box の漢字が正常に表示されない現象が起こっています。
Dialog Box のプロパティから Font(Size) に「MS ゴシック(8)」を選択して下さい。

この値は Dialog.rc のファイルを開くと、以下の記述で確認することができます。
漢字が正常に表示されないときの記述。
FONT 8, "MS Shell Dlg"

「MS ゴシック(8)」の記述。
FONT 8, "MS ゴシック"
文字を太くするときは「MS Pゴシック」を使います。
Pが付くフォントは、ピッチを詰めて表示するタイプです。
FONT 9, "MS Pゴシック"

フォントの設定は Dialog Box のフォントを設定 を参照して下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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