サンプル・プログラム
リソースの準備
前回との違いは、西暦年を入力するための Edit Control と、年数を1ずつ増減できる Spin Control を加えた部分である。
また、アプリケーションのアイコン "application.ico" を「メニュー→リソースの追加→アイコン」を使って追加した。icoファイルは、Photoshop等であらかじめ作成しておく。
プログラムの解説
20: //char*バッファサイズ
21: #define BUFFER_SIZE 255
22:
23: //西暦年の最小値と最大値
24: #define YEAR_MIN 1
25: #define YEAR_MAX 9999
26:
27: //現在のインターフェイス
28: HINSTANCE hInst;
ユーザー入力の範囲として、西暦年の最小値と最大値を定義する。
31: /**
32: * テキストボックスから整数を取得
33: * @param HWND hDlg ダイアログID
34: * @param unsigned id テキストボックスID
35: * @return int 取得値
36: */
37: int getIntEditBox(HWND hDlg, unsigned id) {
38: char buff[BUFFER_SIZE + 1];
39: GetDlgItemText(hDlg, id, buff, sizeof(buff));
40:
41: return atoi(buff);
42: }
44: /**
45: * テキストボックスに整数を代入
46: * @param HWND hDlg ダイアログID
47: * @param unsigned id テキストボックスID
48: * @param int i 設定値
49: * @return なし
50: */
51: void setIntEditBox(HWND hDlg, unsigned id, int i) {
52: char buff[BUFFER_SIZE + 1];
53: snprintf(buff, sizeof(buff), "%d", i);
54: SetDlgItemText(hDlg, id, buff);
55: }
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: }
Spin Control がクリックされると、WM_NOTIFY イベントが発生する。増加か減少かを判断し、西暦年の増減を行い、うるう年判定結果をテキストボックスに代入する。
プロジェクトのビルドと実行
Debugフォルダに出力される isleap3.exe は約1.3Mバイトである。
正式配賦するexeファイルをビルドするときは、「メニュー→プロジェクト→ビルド構成→アクティブにする→Release」を選ぶ。すると、約100Kバイトのコンパクトなexeファイルがビルドされる。
参考サイト
- PHPでWindowsアプリケーションウィンドウに表示する:ぱふぅ家のホームページ