サンプル・プログラム
リソースの準備
ResEdit を起動したら、「メニュー→ファイル→新規プロジェクト」を選択し、Locationにプロジェクト isleap2 のフォルダを、Nameに resource を入力し、Finishする。
右ペインのツールボックスから Static Text をドラッグしてきて、ダイアログ上に配置する。ここに閏年の判定結果を表示する。
左下のプロパティで、IDを IDC_LABEL と入力する。C++プログラムの方から、このIDを参照することになる。
入力ができたら、保存する。
プログラムの解説
7: // 初期値 ============================================================
8: #include <windows.h>
9: #include <commctrl.h>
10: #include <stdio.h>
11: #include <string>
12: #include <stdlib.h>
13: #include <time.h>
14: #include "resource.h"
15: using namespace std;
"windows.h" はWindowsアプリを作るために必要なヘッダdata。
"resource.h" は、ResEdit で作ったリソースIDなどが入っている。
31: /**
32: * ダイアログボックス
33: * @param HWND hDlg
34: * @paramm UINT uMsg
35: * @param WPARAM wParam
36: * @paramL PARAM lParam
37: * @return INT_PTR CALLBACK
38: */
39: INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
40: char buff[255];
41:
42: time_t t = time(0); //現在時刻
43: tm* now = localtime(&t); //ローカルタイム
44: int year = now->tm_year + 1900; //西暦年を取り出す
45: bool res = isleap(year); //閏年かどうか判定する
46:
47: switch(uMsg) {
48: case WM_INITDIALOG:
49: snprintf(buff, sizeof(buff), "%d年は 閏年%s", year, (res ? "です." : "ではありません."));
50: SetDlgItemText(hDlg, IDC_LABEL, buff);
51: break;
52: case WM_CLOSE:
53: EndDialog(hDlg, 0);
54: break;
55: }
56: return 0;
57: }
イベントが発生すると、uMsg にイベントの種類が渡される。
WM_INITDIALOG はダイアログの初期化、WM_CLOSE は終了アイコンが押下されたときに発生するイベントである。今回は、この2つしか使用しない。
60: /**
61: * Windowsメインプログラム
62: * @param HINSTANCE hInstance
63: * @paramm HINSTANCE hPrevInstance
64: * @param LPSTR lpCmdLine
65: * @paramL int nShowCmd
66: * @return int リターンコード
67: */
68: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
69: DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DlgProc)DlgProc);
70: return 0;
71: }
プロジェクトのビルドと実行
リンカーー・フラグに "-mwindows -static -lstdc++ -lgcc -lwinpthread" を、その他のオブジェクトとしてリソースから生成されるオブジェクト "resource.o" を追加してやる。
参考サイト
- PHPで閏年かどうか判定する:ぱふぅ家のホームページ
- PHPでWindowsアプリケーションウィンドウに表示する:ぱふぅ家のホームページ